1. 程式人生 > >bzoj1041 圓上的整點 數學

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