p1500 圓上的整點[HAOI2008]
阿新 • • 發佈:2018-12-13
題目
https://www.luogu.org/problemnew/show/P2508
程式碼
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll R,ans=0;
ll gcd(ll a,ll b)
{
return b?gcd(b,a%b):a;
}
bool check(ll y,double x)
{
if(x==floor(x))//判斷整點
{
ll x1=(ll)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(ll d=1;d<=(ll)sqrt(2*R);++d)
{
if((2*R)%d==0)
{
for(ll a=1;a<=(ll)sqrt(2*R/(2*d));++a)//2*a^2<2*r/d
{
double b=sqrt(((2*R)/d)-a*a);
if(check(a,b)) ans++;
}
if(d!=(2*R)/d)
{
for(ll a=1;a<=(ll)sqrt(d/2);++a)//2*a^2<d
{
double b=sqrt(d-a*a);
if(check(a,b)) ans++;
}
}
}
}
printf("%lld\n",ans*4+4);
return 0;
}