码迷,mamicode.com
首页 > 其他好文 > 详细

[BZOJ1041] [HAOI2008] 圆上的整点 (数学)

时间:2016-07-13 22:04:46      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

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

 

[BZOJ1041] [HAOI2008] 圆上的整点 (数学)

标签:

原文地址:http://www.cnblogs.com/CtrlCV/p/5667616.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!