1 条题解

  • 0
    @ 2026-3-15 18:41:19

    ``#include<bits/stdc++.h> using namespace std;

    //勾股数生成公式 //如果:a=k(m^2-n^2),b=2kmn,c=k(m^2+n^2) //则:a^2+b^2=c^2

    int main() { int N; cin >> N; // 输入N int cnt = 0; // 计数器

    for (int m = 1; m * m <= N; m++) { // 枚举m
        for (int n = 1; n < m; n++) { // 枚举n,n < m
            if (__gcd(m, n) != 1 || (m % 2 == 1 && n % 2 == 1)) continue; // 确保m和n互质且不同时为奇数
            int a = m * m - n * n; // 计算a
            int b = 2 * m * n; // 计算b
            int c = m * m + n * n; // 计算c
            if (c > N) break; // 如果c > N,退出内层循环
            cnt += N / c; // 统计倍数三元组
        }
    }
    cout << cnt << endl; // 输出结果
    return 0;
    

    }

    //如果 m 和 n 同时为奇数,那么 a = m^2 - n^2 和 c = m^2 + n^2 都是偶数(因为奇数的平方是奇数,奇数减奇数或奇数加奇数都是偶数)。 //b = 2mn 也是偶数。 //因此,a、b 和 c 都是偶数,三元组不是最简形式。``

    • 1

    信息

    ID
    351
    时间
    1000ms
    内存
    64MiB
    难度
    4
    标签
    递交数
    61
    已通过
    11
    上传者