bzoj1041 圆上的整点 数学

题目传送门

  题目大意:求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数。

  思路:没思路,看大佬的博客(转载自https://blog.csdn.net/csyzcyj),转载只为记录,详细的证明,大佬的博客已经写得很清楚了,不再赘述,数论题就是这样开心又头秃

 

#include<bits/stdc++.h>
#define CLR(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
long long R,ans=0;
long long gcd(long long x,long long y){return x%y==0 ? y : gcd(y,x%y);}
bool check(long long y,double x)
{
      if(x==floor(x))
      {
            long long x1=(long long)floor(x);
            if(gcd(x1*x1,y*y)==1 && x1*x1!=y*y)//gcd(A,B)=1并且A!=B 
                  return true;
      }
      return false;
}
int main()
{

      scanf("%lld",&R);
      for(long long d=1;d<=(long long)sqrt(2*R);d++)
      {
            if((2*R)%d==0)
            {
                  for(long long a=1;a<=(long long)sqrt(2*R/(2*d));a++)
                  {
                        double b=sqrt(((2*R)/d)-a*a);
                        if(check(a,b))
                              ans++;
                  }
                  if(d!=(2*R)/d)
                  {
                        for(long long a=1;a<=(long long)sqrt(d/2);a++)
                        {
                              double b=sqrt(d-a*a);
                              if(check(a,b))
                                    ans++;
                        }
                  }
            }
      }    
      printf("%lld\n",ans*4+4); 

      return 0;
}
View Code

 

posted @ 2018-11-17 22:39  光芒万丈小太阳  阅读(102)  评论(0编辑  收藏