[HAOI2008]圓上的整點
阿新 • • 發佈:2017-08-29
ont font script blog targe str 多少 limit ()
1041: [HAOI2008]圓上的整點
Time Limit: 10 Sec Memory Limit: 162 MB Submit: 4319 Solved: 1955 [Submit][Status][Discuss]Description
求一個給定的圓(x^2+y^2=r^2),在圓周上有多少個點的坐標是整數。
Input
只有一個正整數n,n<=2000 000 000
Output
整點個數
Sample Input
4Sample Output
4HINT
科普視頻
太神了,看這個
#include <cmath> #include <iostream> usingnamespace std; typedef long long ll; ll Gcd(ll x, ll y){ ll t; if(x > y){ t = x; x = y; y = t; } while(x){ t = x; x = y % x; y = t; } return y; } inline bool Judge(ll a, ll b){ double t = sqrt(b); if(t != floor(t)) returnfalse; if(Gcd(a, b) == 1 && a != b) return true; return false; } int main(){ ll r, ans = 0; cin >> r; for(ll d = 1; d * d <= r * 2; d++) if(2 * r % d == 0){ for(ll i = 1; i * i * d <= r; i++) if(Judge(i * i, 2 * r / d - i * i)) ans++;if(d * d != 2 * r) for(ll i = 1; i * i * 2 <= d; i++) if(Judge(i * i, d - i * i)) ans++; } cout << (ans + 1) * 4 << endl; return 0; }
[HAOI2008]圓上的整點