1041: [HAOI2008]圆上的整点
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3027 Solved: 1343
[ Submit][ Status][ Discuss]
Description
求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数。
Input
只有一个正整数n,n<=2000 000 000
Output
整点个数
Sample Input
4
Sample Output
4
题解:
数学并不懂,只能是模板+1了....
这个应该算是数论的知识了...
/*
http://blog.csdn.net/liuke19950717
*/
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b)
{
if(!b)
{
return a;
}
return gcd(b,a%b);
}
void cheak(ll x,ll &cnt)
{
ll tp=sqrt(x/2.0),a2,b,b2;
for(ll a=1;a<=tp;++a)
{
a2=a*a;
b2=x-a2;
b=sqrt(b2);
if(b*b==b2&&gcd(a2,b2)==1&&a2!=b2)
{
++cnt;
}
}
}
ll circle_num(ll r)
{
ll tp=sqrt(r*2.0),ans=0;
for(ll i=1;i<=tp;++i)
{
if(2*r%i==0)
{
cheak(i,ans);
cheak(2*r/i,ans);
}
}
return (ans+1)*4;
}
int main()
{
ll r;
while(~scanf("%lld",&r))
{
printf("%lld\n",circle_num(r));
}
return 0;
}