zoukankan      html  css  js  c++  java
  • [BZOJ1041] [HAOI2008] 圆上的整点 (数学)

    Description

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

    Input

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

    Output

      整点个数

    Sample Input

    4

    Sample Output

    4

    HINT

    Source

    Solution

      网上有一个很好的证明

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 
     5 ll gcd(ll a, ll b)
     6 {
     7     return b ? gcd(b, a % b) : a;
     8 }
     9 
    10 int main()
    11 {
    12     ll r, d, a, ans = 1;
    13     double b;
    14     cin >> r;
    15     for(d = (ll)(sqrt(2.0 * r) + 0.5); d; --d)
    16     {
    17         if(2 * r % d) continue;
    18         for(a = (ll)(sqrt(1.0 * r / d) + 1e-6); a; --a)
    19         {
    20             b = sqrt(2.0 * r / d - a * a);
    21             if(b - (ll)b > 1e-6) continue;
    22             if(a != (ll)b && gcd(a, (ll)b) == 1) ++ans;
    23         }
    24         if(d == 2 * r / d) continue;
    25         for(a = (ll)(sqrt(0.5 * d) + 1e-6); a; --a)
    26         {
    27             b = sqrt(d - a * a);
    28             if(b - (ll)b > 1e-6) continue;
    29             if(a != (ll)b && gcd(a, (ll)b) == 1) ++ans;
    30         }
    31     }
    32     cout << ans * 4 << endl;
    33     return 0;
    34 }
    View Code
  • 相关阅读:
    和阿木聊Node.js
    C#开发攀爬集锦
    MyBatis实战
    对于技术的思考
    抛物线习题
    变量集中策略
    变换作图中的常用模板函数
    网上看到一题目的解法的启示
    函数习题
    新定义习题
  • 原文地址:https://www.cnblogs.com/CtrlCV/p/5667616.html
Copyright © 2011-2022 走看看