这个题一开始看着没什么思路,但是一看题解就明白了不少,主要是数学证明,代码很好写。
贴个网址:
题干:
题目描述 求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数。 输入格式 只有一个正整数n,n<=2000 000 000 输出格式 整点个数 样例输入 4 样例输出 4
代码:
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> 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 ",ans); return 0; }