[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
复制代码

 

posted @   CtrlCV  阅读(320)  评论(0编辑  收藏  举报
编辑推荐:
· 用纯.NET开发并制作一个智能桌面机器人:从.NET IoT入门开始
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· ASP.NET Core - 日志记录系统(二)
· .NET 依赖注入中的 Captive Dependency
· .NET Core 对象分配(Alloc)底层原理浅谈
阅读排行:
· .NET 开发的分流抢票软件,不做广告、不收集隐私
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· 开箱你的 AI 语音女友「GitHub 热点速览」
· 前端实现 HTML 网页转 PDF 并导出
· 特斯拉CEO埃隆.马斯克的五步工作法,怎么提高工程效率加速产品开发?
点击右上角即可分享
微信分享提示