-数论- [BZOJ 1041][HAOI2008]圆上的整点

题目描述

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

输入格式

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

输出格式

整点个数

样例输入

4

样例输出

4

Solution

主要就是这个视频:https://www.bilibili.com/video/av12131743/

视频里原理已经讲得hin明白,时间复杂度:O(分解质因数)。

如果不看这个视频估计谁也想不到圆竟然和质因数有关系

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define ll long long
#define MAXN 50000
ll n , k , p , tot = 0 , ans = 1;
bool gauss(ll a) {
if (a % 4 != 3) return 1;
return 0;
}
int main() {
scanf("%lld" , &n);
while (!(n & 1)) n >>= 1;
for (ll i = 2; i <= sqrt(n) ; i++) {
p = 0;
while (n % i == 0) {
if (gauss(i)) p += 2;
n /= i;
}
ans *= (p + 1);
}
if (n != 1) {
if (gauss(n)) {
ans *= 3;
}
}
printf("%d" , ans * 4);
return 0;
}
文章作者: RiverFun
文章链接: https://stevebraveman.github.io/blog/2018/10/25/38/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 RiverFun

评论