Problem 9
Special Pythagorean triplet
A Pythagorean triplet is a set of three natural numbers, a < b < c, for which,
For example, 32 + 42 = 9 + 16 = 25 = 52.
There exists exactly one Pythagorean triplet for which a + b + c = 1000.Find the product abc.
特殊毕达哥拉斯三元组
毕达哥拉斯三元组是三个自然数a < b < c组成的集合,并满足
例如,32 + 42 = 9 + 16 = 25 = 52。
有且只有一个毕达哥拉斯三元组满足 a + b + c = 1000。求这个三元组的乘积abc。
题目解答
性质 1. 他们整数倍也是勾股数,即(na, nb, nc)也是勾股数。
性质 2. (a, b, c)之间两两互质。
性质 3. a, b必为一奇一偶。
性质 4. 任何素勾股数均可表示为如下形式, 其中 n < m, 且 gcd(n, m) = 1
a = 2 * n * m
b = m^2 - n^2
c = m^2 + n^2
#include <stdio.h>
#include <inttypes.h>
#include <stdlib.h>
#include <math.h>
int gcd(int a,int b){return !b?a:gcd(b,a%b);}
int main() {
bool flag = true;
int32_t a, b, c, e;
for (int32_t i = 1; i < 32 && flag; ++i) {
for (int32_t j = i + 1; j <= 32 && flag; ++j) {
if((i % 2 == 0 && j % 2 !=0)||(i % 2 != 0 && j % 2 == 0)){
if(gcd(i,j)!=1)continue;
a = j * j - i * i;
b = 2 * i * j;
c = i * i + j * j;
if (1000 % (a + b + c) == 0) {
e = (int32_t)pow(1000 / (a + b + c), 3);
printf("%d\n", e * a * b * c);
flag = false;
}
}
}
}
return 0;
}