BZOJ(2) 1041: [HAOI2008]圆上的整点
1041: [HAOI2008]圆上的整点
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 4966 Solved: 2258
[Submit][Status][Discuss]
Description
求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数。
Input
只有一个正整数n,n<=2000 000 000
Output
整点个数
Sample Input
Sample Output
HINT
Source
思路:看一眼题目,感觉可做。然后开始想思路,想着想着发现不可做,所以就写了个暴力。
这是第一个:
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
long long n;
long long ans;
int main(){
scanf("%lld",&n);
int now=sqrt(n);
long long maxn=n*n;
for(int i=;i<=n;i++){
long long k=i*i;
long long z=maxn-k,s=sqrt(z);
if(s*s!=z) continue;
if(k!=&&s!=) ans+=;
else ans+=;
}
cout<<ans;
}
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
long long n;
long long ans=,sum;
int p[],c[];
int main(){
scanf("%lld",&n);
int m=n*n;
for(int i=;i<=n;i++)
if(m%i==){
p[++sum]=i;
while(m%i==) m/=i,c[sum]++;
}
if(m>){ p[++sum]=m;c[sum]++; }
for(int i=;i<=sum;i++) cout<<p[i]<<" "<<c[i]<<endl;
for(int i=;i<=sum;i++){
if(p[i]%==) continue;
else if(p[i]%==) ans*=c[i];
else if(p[i]%==&&c[i]%!=) ans=;
}
if(ans==){ printf("0\n");return ; }
else if(ans==){ printf("4\n");return ; }
else cout<<ans*+;
}
结果发现,调试忘记注释了。。。
只有某个奇怪的点得分了。。。
然后我就以为我把调试注释以后,就能AC4个点。然并卵,还是20分。
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
long long n;
long long ans=,sum;
int p[],c[];
int main(){
scanf("%lld",&n);
int m=n*n;
for(long long i=;i<=n;i++)
if(m%i==){
p[++sum]=i;
while(m%i==) m/=i,c[sum]++;
}
if(m>){ p[++sum]=m;c[sum]++; }
// for(int i=1;i<=sum;i++) cout<<p[i]<<" "<<c[i]<<endl;
for(int i=;i<=sum;i++){
if(p[i]%==) continue;
else if(p[i]%==) ans*=c[i];
else if(p[i]%==&&c[i]%!=) ans=;
}
if(ans==){ printf("0\n");return ; }
else if(ans==){ printf("4\n");return ; }
else cout<<ans*+;
}
最后,终于胜利了!!
这是对上一个代码的优化。
首先 先把n的因数中的2都消去,因为2对答案并没有贡献。
其次 一个数 n*n=n^2 可以因式分解n^2=p1a1*2*p2a1*2*p3a3*2*......
所以,因式分解后的质数,如果模4后余1那ans=ans*(ai*2+1);最后ans*4。
还有自身是%4=1的质数的情况特判一下。ans=ans*(1*2+1)=ans*3;
然后输出就好了。
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int ans=;
int n,sum=;
int main(){
scanf("%d",&n);
while((n&)^) n>>=;
while(sum*sum<=n) sum++;
for(int i=;i<=sum;i++)
if(n%i==){
int tmp=;
while(n%i==){ n/=i;tmp+=; }
if(i%==) ans=ans*(tmp+);
}
if(n>&&n%==) ans*=;
printf("%d",ans);
}
BZOJ(2) 1041: [HAOI2008]圆上的整点的更多相关文章
- 【BZOJ】1041: [HAOI2008]圆上的整点(几何)
http://www.lydsy.com:808/JudgeOnline/problem.php?id=1041 所谓的神题,我不会,直接题解..看了半天看懂题解了.详见hzwer博客 这题呢,我只能 ...
- 【BZOJ】 1041: [HAOI2008]圆上的整点
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1041 ${x^{2}+y^{2}=r^{2} }$ ${\Rightarrow y^{2} ...
- BZOJ 1041: [HAOI2008]圆上的整点
1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3621 Solved: 1605[Submit][Sta ...
- bzoj 1041: [HAOI2008]圆上的整点 数学
1041: [HAOI2008]圆上的整点 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
- bzoj 1041: [HAOI2008]圆上的整点 本原勾股數組
1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2027 Solved: 853[Submit][Stat ...
- BZOJ 1041: [HAOI2008]圆上的整点【数论,解方程】
1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4210 Solved: 1908[Submit][Sta ...
- 1041: [HAOI2008]圆上的整点
1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4298 Solved: 1944[Submit][Sta ...
- BZOJ 1041 [HAOI2008]圆上的整点:数学
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1041 题意: 给定n(n <= 2*10^9),问你在圆x^2 + y^2 = n^ ...
- BZOJ 1041 [HAOI2008]圆上的整点:数学【费马平方和定理】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1041 题意: 给定n(n <= 2*10^9),问你在圆x^2 + y^2 = n^ ...
随机推荐
- Spring Boot (31) 数据验证
曾经参数的验证是这样的: public String test(User user){ if(user == null){ throw new NullPointerException("u ...
- C#学习-EF在三层中使用
1.搭建普通三层 DAL层,BLL层,Model层,Web层: DAL层引用Model层 BLL层引用DAL层和Model层 Web层引用BLL层和Model层 2.实现EF三层的搭建(添加引用,修改 ...
- Disruptor源码解读
上一篇已经介绍了Disruptor是什么?简单总结了为什么这么快?下面我们直接源码搞起来,简单粗暴.高性能队列disruptor为什么这么快? 一.核心类接口 Disruptor 提供了对RingBu ...
- dubbo面试题
40 道 Dubbo 面试题及答案:https://blog.csdn.net/BinshaoNo_1/article/details/83024303 (原地址奉上:https://mp.weixi ...
- Elasticsearch--搜索
目录 基本知识 查询结果返回设置:版本值.得分限制.定制返回字段 搜索类型 搜索执行偏好 基本查询 过滤器类型 高亮 控制高亮的片段 验证查询 数据排序 查询重写 基本知识 查询结果返回设置:版本值. ...
- TortoiseSVN客户端不能记住用户名和密码
TortoiseSVN客户端重新设置用户名和密码 在第一次使用TortoiseSVN从服务器CheckOut的时候,会要求输入用户名和密码,这时输入框下面有个选项是保存认证信息,如果选了这个选项,那么 ...
- mongodb数据库命令
常用数据库命令汇总 Database Commands Api 下面简单列一下Shell常用的基本命令 启动连接Mongodb #带配置信息启动 mongod -f xxx.conf #连接 mong ...
- MySql学习笔记(三) —— 聚集函数的使用
1.AVG() 求平均数 select avg(prod_price) as avg_price from products; --返回商品价格的平均值 ; --返回生产商id为1003的商品价格平均 ...
- Linux System
Linux System linux 是一个功能强大的操作系统,同时它是一个自由软件,是免费的.源代码开放的,编制它的目的是建立不受任何商品化软件版权制约的.全世界都能自由使用的UNIX兼容产品.各种 ...
- 一个小demo熟悉Spring Boot 和 thymeleaf 的基本使用
目录 介绍 零.项目素材 一. 创建 Spring Boot 项目 二.定制首页 1.修改 pom.xml 2.引入相应的本地 css.js 文件 3.编辑 login.html 4.处理对 logi ...