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; }
——愿为泰山而不骄
qq850874665~~