首页 > 代码库 > 【BZOJ 1041】 [HAOI2008]圆上的整点
【BZOJ 1041】 [HAOI2008]圆上的整点
1041: [HAOI2008]圆上的整点
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2196 Solved: 941
[Submit][Status]
Description
求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数。
Input
r
Output
整点个数
Sample Input
4
Sample Output
4
HINT
n<=2000 000 000
接下来枚举d,a,判断求出的b是否和题意即可。
#include <iostream> #include <algorithm> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #define LL long long using namespace std; LL r; int gcd(LL a,LL b) { return a==0LL?b:gcd(b%a,a); } bool ok(LL a,LL b) { if (a==b||gcd(a,b)!=1LL) return false; return true; } int main() { scanf("%lld",&r); LL ans=0; for (LL d=1LL;d<=sqrt(2LL*r);d++) if ((2LL*r)%d==0LL) { for (LL a=1;a<=sqrt(r/d);a++) { LL b=sqrt(2LL*r/d-a*a); if (b*b!=(2LL*r/d-a*a)) continue; if (ok(a,b)) ans++; } if (d*d!=2LL*r) { for (LL a=1LL;a<=sqrt(d/2);a++) { LL b=sqrt(d-a*a); if (b*b!=d-a*a) continue; if (ok(a,b)) ans++; } } } cout<<ans*4LL+4LL<<endl; return 0; }
感悟:
1.其实这个题挺好推的,关键是有勇气推下去。。
【BZOJ 1041】 [HAOI2008]圆上的整点
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。