20pts求调
查看原帖
20pts求调
923403
FallingFYC_楼主2023/10/27 19:39

按 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;
}
2023/10/27 19:39
加载中...