bzoj1041 [HAOI2008]圆上的整点 gcd
2017-12-19 19:16
495 查看
这个题非常恶心,因为条件很少,要求也很少,看起来没有任何特殊的性质
所以只能往约数、gcd上靠
然后就是
x^2=r^2-y^2=(r-y)(r+y)
设A=r-y, B=r+y
由于A*B是完全平方数, 设d=gcd(A,B)
则 gcd(A/d,B/d)=1
设A=u*d B=v*d
所以u=(r-y)/d , v=(r+y)/d
则v+u=2r/d
则u和v都是完全平方数
再设 u=a*a , v=b*b
枚举2r的因子d , 再枚举a, 统计答案
码:
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
long long n,i,j,a,b,ans;
long long gcd(long long a,long long b)
{
if(!b)return a;
return gcd(b,a%b);
}
int main()
{
scanf("%lld",&n);
for(i=1;i*i<=2*n;i++)
{
if((2*n)%i==0)
{
for(j=1;j*j<=2*n/i;j++)//d==i
{
a=j*j;
b=2*n/i-a;
if(b<=0)break;
long long p=sqrt(b);
if(gcd(a,b)==1&&(p*p)<=(b)&&(p*p)>=(b))
{
ans+=1;
}
}
if(i*i!=2*n)
{
for(j=1;j*j<=i;j++)//d==2*n/i
{
a=j*j;
b=2*n/(2*n/i)-a;
if(b<=0)break;
long long p=sqrt(b);
if(gcd(a,b)==1&&(p*p)<=(b)&&(p*p)>=(b))
{
ans++;
}
}
}
}
}
printf("%lld",(ans*4+4)/2);
}
所以只能往约数、gcd上靠
然后就是
x^2=r^2-y^2=(r-y)(r+y)
设A=r-y, B=r+y
由于A*B是完全平方数, 设d=gcd(A,B)
则 gcd(A/d,B/d)=1
设A=u*d B=v*d
所以u=(r-y)/d , v=(r+y)/d
则v+u=2r/d
则u和v都是完全平方数
再设 u=a*a , v=b*b
枚举2r的因子d , 再枚举a, 统计答案
码:
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
long long n,i,j,a,b,ans;
long long gcd(long long a,long long b)
{
if(!b)return a;
return gcd(b,a%b);
}
int main()
{
scanf("%lld",&n);
for(i=1;i*i<=2*n;i++)
{
if((2*n)%i==0)
{
for(j=1;j*j<=2*n/i;j++)//d==i
{
a=j*j;
b=2*n/i-a;
if(b<=0)break;
long long p=sqrt(b);
if(gcd(a,b)==1&&(p*p)<=(b)&&(p*p)>=(b))
{
ans+=1;
}
}
if(i*i!=2*n)
{
for(j=1;j*j<=i;j++)//d==2*n/i
{
a=j*j;
b=2*n/(2*n/i)-a;
if(b<=0)break;
long long p=sqrt(b);
if(gcd(a,b)==1&&(p*p)<=(b)&&(p*p)>=(b))
{
ans++;
}
}
}
}
}
printf("%lld",(ans*4+4)/2);
}
相关文章推荐
- bzoj1041[HAOI2008]圆上的整点
- bzoj1041 [HAOI2008]圆上的整点
- bzoj 1041: [HAOI2008]圆上的整点 【数学 思维】
- bzoj 1041 [HAOI2008]圆上的整点
- 【HAOI2008】【BZOJ1041】圆上的整点
- BZOJ 1041 HAOI 2008 圆上的整点 数学推导
- BZOJ1041 [HAOI2008]圆上的整点
- bzoj1041: [HAOI2008]圆上的整点
- bzoj千题计划127:bzoj1041: [HAOI2008]圆上的整点
- [BZOJ1041][HAOI2008]圆上的整点
- [bzoj 1041][HAOI2008]圆周上的整点(枚举)
- BZOJ 1041: [HAOI2008]圆上的整点
- bzoj 1041: [HAOI2008]圆上的整点 数学
- 【BZOJ】1041: [HAOI2008]圆上的整点
- [枚举] BZOJ1041: [HAOI2008]圆上的整点
- bzoj 1041: [HAOI2008]圆上的整点
- 【BZOJ1041】[HAOI2008]圆上的整点 数学
- BZOJ1041 [HAOI2008]圆上的整点 【数学】
- BZOJ1041 HAOI2008圆上的整点(数论)
- BZOJ 1041: [HAOI2008]圆上的整点【数论,解方程】