按 Nemlit 大佬的tj写的(唯一能看懂的),可 20pts,开了 ull 不变,感觉是细节问题。
#include <bits/stdc++.h>
#define int unsigned long long
using namespace std;
int r , ans;
int gcd(int a , int b)
{
if (!b) return a;
return gcd(b , a % b);
}
void solve(int d)
{
for (int s = 1 ; s * s <= 2 * r / d ; s++)
{
int t = sqrt(2 * r / d - s * s);
if ((t * t + s * s) * d == 2 * r && gcd(s , t) == 1)
{
int x = (t * t - s * s) / 2 * d , y = d * s * t;
if (x && y && y * y + x * x == r * r) ans += 2;
}
}
return;
}
signed main()
{
cin >> r;
for (int d = 1 ; d * d <= 2 * r ; d++)
{
if ((2 * r) % d) continue;
solve(d);
if (d * d < 2 * r) solve(2 * r / d);
}
ans = (ans + 1) * 4;
cout << ans;
return 0;
}