题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1041
题意:求圆x^2+y^2=r^2上的整点。
思路:由于对称性,我们只需要计算第一象限的即可。
因此,我们首先枚举2r的约数d,令R=r/d,枚举u,v,使得u^2+v^2=R且(u,v)=1即可。
i64 n;
i64 Gcd(i64 x,i64 y)
{
return !y?x:Gcd(y,x%y);
}
i64 cal(i64 n)
{
i64 i,j,ans=0;
for(i=1;i*i*2<n;i++)
{
j=sqrt(1.0*n-i*i+0.5);
if(i*i+j*j==n&&Gcd(i,j)==1) ans++;
}
return ans;
}
int main()
{
Rush(n)
{
i64 i,ans=0;
n<<=1;
for(i=1;i*i<=n;i++) if(n%i==0)
{
ans+=cal(n/i);
if(i*i!=n) ans+=cal(i);
}
ans=ans*4+4;
PR(ans);
}
return 0;
}