zoukankan      html  css  js  c++  java
  • bzoj1041: [HAOI2008]圆上的整点

    http://www.lydsy.com/JudgeOnline/problem.php?id=1041

    设 X>0 ,Y>0

    X^2 + Y^2 = R^2

    X^2 = R^2-Y^2 = (R+Y)(R-Y)

    令  d=gcd(R+Y,R-Y),A=(R+Y)/d,B=(R-Y)/d

    则 gcd(A,B)=1,且A != B                                                                                                                                                                              

     X^2= d^2 *A * B

    所以 A * B 为 完全平方数

    又因为 gcd(A,B)=1 ,A!=B,所以 A,B 都是 完全平方数

    令 a= 根号A,b=根号B

    a^2 + b ^2 = 2*R / d

    所以 d 必须是 2*R 的 约数   

    根号(2*R) 枚举 约数 d

    1、a^2 + b^2 = 2*R / d

    2、a^2 + b^2 = d

    对于 每一种 情况 分别 根号复杂度 枚举 a,计算b

    判断相应的 A ,B 是否满足  gcd=1 且 A!=B

    满足则 ans+1

    这只算出了第一象限的情况

    根据园的对称性,ans*4 可得 所有 象限内的点

    最后在加上4个在 坐标轴上的点即可

    #include<cmath>
    #include<cstdio>
    
    using namespace std;
    
    typedef long long LL;
    
    LL R;
    
    int ans=0;
    
    int gcd(int A,int B) { return !B ? A : gcd(B,A%B); }
    
    void solve(int t,int d)
    {
        int n=sqrt(t*1.0);
        int A,B,b;
        for(LL a=1;a<=n;++a)
        {
            B=t-a*a; b=sqrt(B);
            if(b*b!=B || !B) continue;
            A=a*a; 
            if(gcd(A,B)==1 && A!=B) ans++;
        }
    }
    
    int main()
    {
        scanf("%lld",&R);
        int n=sqrt(R*2.0);
        for(int d=1;d<=n;++d)
        {
            if(R*2%d==0) 
            {
                solve(2*R/d,d);
                if(d*d!=n) solve(d,2*R/d);
            }
        }
        ans/=2;
        ans=ans*4+4;
        printf("%d",ans);
    }

    1041: [HAOI2008]圆上的整点

    Time Limit: 10 Sec  Memory Limit: 162 MB
    Submit: 4640  Solved: 2092
    [Submit][Status][Discuss]

    Description

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

    Input

    只有一个正整数n,n<=2000 000 000

    Output

    整点个数

    Sample Input

    4

    Sample Output

    4
  • 相关阅读:
    学习笔记-Java设计模式-结构型模式1
    学习笔记-Java设计原则
    阅读笔记:DQL、DML、DDL、DCL的概念与区别
    阅读笔记-HTTP返回状态码
    大数据应用技术课程实践--选题与实践方案
    15 手写数字识别-小数据集
    14 深度学习-卷积
    java集合(一)
    13-垃圾邮件分类2
    机器学习——12.朴素贝叶斯-垃圾邮件分类
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/7931736.html
Copyright © 2011-2022 走看看