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

时间:2023-03-09 17:49:35
BZOJ1041:[HAOI2008]圆上的整点(数论)

Description

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

Input

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

Output

整点个数

Sample Input

4

Sample Output

4

Solution

一个有趣的视频

Code

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
using namespace std;
LL n,ans=;
int main()
{
scanf("%lld",&n); n=n*n;
for (int i=; i<=sqrt(n); ++i)
{
int cnt=;
while (n%i==) n/=i, cnt++;
if (i%==) ans*=(cnt%)?:;
else if (i%==) ans*=cnt+;
}
if (n%==) ans=;
else if (n!= && n%==) ans*=;
printf("%lld\n",ans*);
}