毕达哥拉斯三联体是一组三个自然数,a <b <c,为此,a 2 + b 2 = c 2
例如,3 2 + 4 2 = 9 + 16 = 25 = 5 2。
确实存在一个毕达哥拉斯三联体,其中a + b + c =1000。找到乘积abc。
来源 :http : //projecteuler.net/index.php?section=problems&id=9
我尝试过,但不知道我的代码哪里出了问题。这是我在C中的代码:
#include <math.h> #include <stdio.h> #include <conio.h> void main() { int a=0, b=0, c=0; int i; for (a = 0; a<=1000; a++) { for (b = 0; b<=1000; b++) { for (c = 0; c<=1000; c++) { if ((a^(2) + b^(2) == c^(2)) && ((a+b+c) ==1000))) printf("a=%d, b=%d, c=%d",a,b,c); } } } getch(); }
#include <math.h> #include <stdio.h> int main() { const int sum = 1000; int a; for (a = 1; a <= sum/3; a++) { int b; for (b = a + 1; b <= sum/2; b++) { int c = sum - a - b; if ( a*a + b*b == c*c ) printf("a=%d, b=%d, c=%d\n",a,b,c); } } return 0; }
说明:
b = a; 如果a,b(a <= b)和c是毕达哥拉斯三重态, 则b,a(b> = a)和c-也是解,因此我们只能搜索一种情况
c = 1000-a-b; 这是问题的条件之一(我们不需要扫描所有可能的“ c”:只需对其进行计算)