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

    n=d*(u^2+v^2),枚举d(从1到sqrt(n)),然后判断n/d和d。再枚举一组u,v,如果gcd(u,v)=1,则是一组可行解。枚举八分之一圆,答案乘以8,再加上4个坐标轴上的点。

     
    #include<algorithm>
    #include<iostream>
    #include<cstdlib>
    #include<cstring>
    #include<cstdio>
    #include<cmath>
    using namespace std;
     
    typedef long long LL;
     
    LL r,n;
    LL ans=1;
     
    LL gcd (LL a,LL b)
    {
        return b==0 ? a : gcd(b,a%b);
    }
     
    LL work(LL d)
    {
        LL k=0,res=2*r/d;
        for (LL i=1;i*i<=res;i++)
        {
            LL t=res-i*i;
            LL v=(LL)sqrt(t+0.5);
            if (i>=v)
                break;
            if (i*i+v*v==res && gcd(i,v)==1)
                k++;
        }
        return k;
    }
     
    int main()
    {
        scanf("%lld",&r);
        n=2*r;
        for (LL i=1;i*i<=n;i++)
            if (n%i==0)
            {
                ans+=work(i);
                if (i*i==n)
                    break;
                ans+=work(n/i);
            }
        printf("%lld
    ",ans<<2);
        return 0;
    }
    

      

  • 相关阅读:
    Python与数据库
    初识matplotlib
    Jquery--实现轮播图
    Juery入门2
    CSS布局方式
    Jquery入门一
    html-DOM了解
    jquery --入门
    JS练习
    kettle 报错汇总
  • 原文地址:https://www.cnblogs.com/yangjiyuan/p/5321098.html
Copyright © 2011-2022 走看看