毕达哥拉斯三重印刷问题
Pythagorean Triple Printing Issue
只是了解我在做什么:我们正在为 "x" 设置一个最大值,然后列出所有原始毕达哥拉斯三元组。我的 gcd 行和 if 语句行也出现错误。任何指导都会有所帮助,谢谢大家。
#include <stdio.h>
int main (){
int x,y,z;
int a,b,c;
int max;
//Get user input
printf("What is the maximum bound on x?\n");
scanf("%d", &max);
y = 1;
while (y < x) {
while (x <= max) {
if ((x%2 == 1 || y%2 == 1) && gcd(x, y) == 1) {
return x;
}
else {
a = (x*x)-(y*y);
b = 2*x*y;
c = (x*x)+(y*y);
}
printf("(%d, %d, %d)\n", a, b, c);
x++;
y++;
}
}
return 0;
}
您的代码存在一些问题:
您正在比较 y
和 while (y < x)
中的 x
,其中 x
未初始化。我猜你需要所有对 x, y
和 y < x <= max
.
当您 return
退出程序时。我猜你需要检查 x
、y
是否是互素数 (gcd(x, y) == 1
) 并且是否有奇差 ((x - y) % 2 == 1
) 以生成原始三元组。
你没有定义gcd
.
因此您可以执行以下操作:
#include <stdio.h>
int gcd(x, y) {
return y == 0 ? x : gcd(y, x % y);
}
int main () {
int x, y, max;
printf("Maximum x? ");
scanf("%d", &max);
for (x = 2; x <= max; x++)
for (y = 1; y < x; y++)
if (((x - y) % 2 == 1) && (gcd(x, y) == 1))
printf("(%d, %d, %d)\n", x * x - y * y, 2 * x * y, x * x + y * y);
}
只是了解我在做什么:我们正在为 "x" 设置一个最大值,然后列出所有原始毕达哥拉斯三元组。我的 gcd 行和 if 语句行也出现错误。任何指导都会有所帮助,谢谢大家。
#include <stdio.h>
int main (){
int x,y,z;
int a,b,c;
int max;
//Get user input
printf("What is the maximum bound on x?\n");
scanf("%d", &max);
y = 1;
while (y < x) {
while (x <= max) {
if ((x%2 == 1 || y%2 == 1) && gcd(x, y) == 1) {
return x;
}
else {
a = (x*x)-(y*y);
b = 2*x*y;
c = (x*x)+(y*y);
}
printf("(%d, %d, %d)\n", a, b, c);
x++;
y++;
}
}
return 0;
}
您的代码存在一些问题:
您正在比较
y
和while (y < x)
中的x
,其中x
未初始化。我猜你需要所有对x, y
和y < x <= max
.当您
return
退出程序时。我猜你需要检查x
、y
是否是互素数 (gcd(x, y) == 1
) 并且是否有奇差 ((x - y) % 2 == 1
) 以生成原始三元组。你没有定义
gcd
.
因此您可以执行以下操作:
#include <stdio.h>
int gcd(x, y) {
return y == 0 ? x : gcd(y, x % y);
}
int main () {
int x, y, max;
printf("Maximum x? ");
scanf("%d", &max);
for (x = 2; x <= max; x++)
for (y = 1; y < x; y++)
if (((x - y) % 2 == 1) && (gcd(x, y) == 1))
printf("(%d, %d, %d)\n", x * x - y * y, 2 * x * y, x * x + y * y);
}