#include <bits/stdc++.h>
using namespace std;
long long gcd (long long a, long long b) {return b == 0 ? a : gcd(b, a % b);}
int main () {
long long r;
scanf("%lld", &r);
long long ans = 0;
for (long long i = 1; i * i <= r; i++) {
if (r % i > 0)
continue;
for (long long j = 1; j * j <= (i >> 1); j++) {
long long tmp = trunc(sqrt(i - (j * j))); // trunc 是小数去尾函数 —— Description By Shuchong
if (j * j + tmp * tmp != i)
continue;
if ((gcd(j * j, tmp * tmp) == 1) && (j != tmp))
ans++;
}
if (r / i != i) {
for (long long j = 1; j * j <= (i >> 1); j++) {
long long tmp = trunc(sqrt((r / i) - (j * j))); // trunc 是小数去尾函数 —— Description By Shuchong
if (j * j + tmp * tmp != (r / i))
continue;
if ((gcd(j * j, tmp * tmp) == 1) && (j != tmp))
ans++;
}
}
}
printf("%lld", 4 * (ans + 1));
return 0;
}
有点迷惑,我开 ll 了啊,为啥还是 30 分捏(