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;
}

  

 

posted @ 2016-05-01 01:00  codeisking  阅读(178)  评论(0)    收藏  举报