1 条题解
-
0
``#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 都是偶数,三元组不是最简形式。``
信息
- ID
- 351
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 4
- 标签
- 递交数
- 61
- 已通过
- 11
- 上传者