B1041 [HAOI2008]圆上的整点 数学

这个题一开始看着没什么思路,但是一看题解就明白了不少,主要是数学证明,代码很好写。

贴个网址:

hzwer

题干:

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

输入格式
  只有一个正整数n,n<=2000 000 000

输出格式
  整点个数

样例输入
4
样例输出
4

代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
    int n,ans=4;
    scanf("%d",&n);
    while((n&1)^1) n>>=1;
    int x=1;
    while(x*x<=n) x++;
    for(int i=2; i<=x; i++)
        if(n%i==0)
        {
            int c=0;
            while(n%i==0) c+=2,n/=i;
            if(i%4==1) ans*=(c+1);
        }
    if(n>1&&n%4==1) ans*=3;
    printf("%d\n",ans);
    return 0;
}

 

posted @ 2018-09-18 16:10  DukeLv  阅读(162)  评论(0编辑  收藏  举报