1041: [HAOI2008]圆上的整点

题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1041

题目大意:求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数。

题解:

∵  x^2+y^2=r^2 ∴ x^2=r^2-y^2 ∴x^2=(r-y)(r+y)

  设d=gcd(r-y,r+y); r-y=d*a^2; r+y=d*b^2; (a

∵x^2=d^2*a^2*b^2

 ∴x=d*a*b;

∵2*y=d*(b^2-a^2) 

∴y=d*(b^2-a^2)/2;

∵2*r=d*(a^2+b^2)  

∴d为2r的因子

∵2*r/d=a^2+b^2 且a 判断a,b是否互素,如果互素满足条件。

时间复杂度sqrt(2*n)

#include 
using namespace std;
typedef long long ll;
ll n,ans;
void solve(ll k)
{
    ll b;
    for(ll a=1ll;a*a>n;
    ans=4;
    for(ll d=1;d*d<=2ll*n;d++)
    {
        if((2ll*n)%d==0)
        {
            solve(d);
            solve(2ll*n/d);
        }
    }
    cout<

 

你可能感兴趣的:(bzoj,数论)