1. 程式人生 > >[HAOI2008]圓上的整點

[HAOI2008]圓上的整點

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

4

Sample Output

4

HINT

科普視頻

太神了,看這個

#include <cmath>
#include <iostream>
using
namespace 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)) return
false; 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]圓上的整點