zoukankan      html  css  js  c++  java
  • 圆上的整点

    洛谷

    x^2+y^2=r^2
    y^2=(r-x)(r+x)
    1.设d=gcd(r-x,r+x)
    2.设A=(r-x)/d,B=(r+x)/d;
    因为y^2=A*B*d*d
      所以A*B是完全平方数
    又因为A,B互质
      所以A,B是完全平方数
    3.设A=a*a,B=b*b
      所以y=a*d*b
    x=(b^2-a^2)*d/2
    r=(b^2+a^2)*d/2

    #include<bits/stdc++.h>
    #define re return
    #define inc(i,l,r) for(long long i=l;i<=r;++i)
    using namespace std;
    template<typename T>inline void rd(T&x)
    {
        char c;bool f=0;
        while((c=getchar())<'0'||c>'9')if(c=='-')f=1;
        x=c^48;
        while((c=getchar())>='0'&&c<='9')x=x*10+(c^48);
        if(f)x=-x;
    }
    
    #define ll long long
    ll r,x,y,a,b,d,ans,r2;
    inline ll gcd(ll a,ll b){re b?gcd(b,a%b):a;}
    int main()
    {
        rd(r);
        r2=r*2;
        //inc(i,1,sqrt(r))
        for(d=1;d<=sqrt(r2);++d)
        if(r2%d==0)
        {
            ll d1=r2/d;
            for(b=1;b<=sqrt(d);++b)
            {
                a=sqrt(d-b*b);
                if(b<=a||a==0)continue;
                if((a*a==d-b*b)&&gcd(a,b)==1)++ans;
            }
            if(d!=d1)
            {    
                for(b=1;b<=sqrt(d1);++b)
                {
                    a=sqrt(d1-b*b);
                    if(b<=a||a==0)continue;
                    if((a*a==d1-b*b)&&gcd(a,b)==1)++ans;
                }
            }
        }
        
        printf("%lld",(ans+1)*4);
        re 0;
    }
    View Code
  • 相关阅读:
    Python之路Day11
    Python之路Day10
    Python中需要注意的一些小坑
    Python之路Day09
    Python之路Day08
    关于谷歌浏览器安装非官方商城插件
    Python之路Day07
    Python之路Day06
    Python之路Day05
    Python 之路Day04
  • 原文地址:https://www.cnblogs.com/lsyyy/p/11724785.html
Copyright © 2011-2022 走看看