bzoj1041 [HAOI2008]圆上的整点
Description
求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数。
Input
只有一个正整数n,n<=2000 000 000
Output
整点个数
Sample Input
4
Sample Output
4

#include<cstdio>
#include<cmath>
#include<algorithm>
#define LL long long
using namespace std;
LL x=1;
void CNT(LL t){
for(LL a=1;a*a<t/2;++a){
LL b=(LL)sqrt(t-a*a);
if(a*a+b*b==t && __gcd(a,b)==1)x++;
}
}
int main(){
long long r,d;
scanf("%lld",&r); r=r*2;
for(d=1;d*d<r;++d)if(r%d==0)CNT(d),CNT(r/d);
if(d*d==r)CNT(d);
x<<=2;
printf("%lld\n",x);
return 0;
}

浙公网安备 33010602011771号