素勾股数
题目
特殊毕达哥拉斯三元组
毕达哥拉斯三元组是三个自然数a < b < c组成的集合,并满足
a方 + b方 = c方
例如,3方 + 4方 = 9 + 16 = 25 = 5方。
有且只有一个毕达哥拉斯三元组满足 a + b + c = 1000。求这个三元组的乘积a b c。
题目解析
由素勾股数的性质可知,只需要求出素勾股数那么它的倍数也是勾股数,而要求素勾股数要借助性质四
代码演示
#include<stdio.h>
#include<math.h>
int gcd(int m, int n) {
return(n ? gcd(n, m%n) : m); //求最大公约数
}
int main() {
int ans = 0;
for(int n = 1; n <= 33; n++) {
for(int m = n + 1; m <= 33; m++) { // m一定要大于n
if(gcd(m ,n) != 1) continue;
int a = 2 * n * m;
int b = m * m - n * n;
int c = m * m + n * n;
if(1000 % (a + b + c) == 0) { //如果1000 % (a + b + c) == 0那么要求勾股数就是它的倍数
int k = 1000 / (a + b + c);
ans = a * b * c *(int)pow(k, 3);
}
}
}
printf("%d", ans);
}