这个题一开始看着没什么思路,但是一看题解就明白了不少,主要是数学证明,代码很好写。
贴个网址:
题干:
题目描述 求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数。输入格式 只有一个正整数n,n<=2000 000 000输出格式 整点个数样例输入4样例输出4
代码:
#include#include #include #include using namespace std;int main(){ int n,ans=4; scanf("%d",&n); while((n&1)^1) n>>=1; int x=1; while(x*x<=n) x++; for(int i=2; i<=x; i++) if(n%i==0) { int c=0; while(n%i==0) c+=2,n/=i; if(i%4==1) ans*=(c+1); } if(n>1&&n%4==1) ans*=3; printf("%d\n",ans); return 0;}