BZoj 1041 圆上的整点【模板+1】

来源:互联网 发布:腊肠犬 知乎 编辑:程序博客网 时间:2024/06/03 04:57

1041: [HAOI2008]圆上的整点

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 3027  Solved: 1343
[Submit][Status][Discuss]

Description

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

Input

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

Output

  整点个数

Sample Input

4

Sample Output

4


题解:

数学并不懂,只能是模板+1了....

这个应该算是数论的知识了...


/*http://blog.csdn.net/liuke19950717*/#include<cstdio>#include<cmath>#include<cstring>using namespace std;typedef long long ll;ll gcd(ll a,ll b){if(!b){return a;}return gcd(b,a%b);}void cheak(ll x,ll &cnt){ll tp=sqrt(x/2.0),a2,b,b2;for(ll a=1;a<=tp;++a){a2=a*a;b2=x-a2;b=sqrt(b2);if(b*b==b2&&gcd(a2,b2)==1&&a2!=b2){++cnt;}}}ll circle_num(ll r){ll tp=sqrt(r*2.0),ans=0;for(ll i=1;i<=tp;++i){if(2*r%i==0){cheak(i,ans);cheak(2*r/i,ans);}}return (ans+1)*4;}int main(){ll r;while(~scanf("%lld",&r)){printf("%lld\n",circle_num(r));}return 0;}


0 0
原创粉丝点击