【发布时间】:2019-01-17 16:35:41
【问题描述】:
我编写了一个程序来查找公约数、最大公约数和最小公约数。我的方法是先找到gcd,然后将gcd分解成素数。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int prime(int x) {
int y;
for (y = 2; y < x; y++) {
if (x % y != 0)
continue;
else
return 1;
}
return 0;
}
int main() {
int n, m, i, gcd, lcm, k;
// Input m and n
printf("Enter m = ");
scanf("%d",&m);
printf("Enter n = ");
scanf("%d",&n);
// Common prime divisors
lcm = m * n;
while (m != n)
if (m > n) m = m - n;
else n = n - m;
gcd = m;
lcm = lcm / gcd;
if (m <= 1)
printf("No common prime divisors");
else {
printf("Common prime divisors: ");
for (i = 2; i <= m - 1; i++) {
k = prime(i);
if (k = 1)
if (m % i == 0)
printf("%d ", i);
}
}
printf("\nGreatest common divisor: %d\nLeast common multiple: %d", gcd, lcm);
return 0;
}
该程序似乎正在运行,但是当我输入 m = 2 和 n = 4 时,本应为 '2' 的公约数并没有出现。
那么我的代码有什么问题呢?
【问题讨论】:
-
这确实是一个调试器可以帮助解决的好案例。
-
2 和 4 的 gcd 是多少?你介意素数的更高次幂吗?
-
为什么函数中没有 GCD?您的主要功能效率不高。当数字不是素数时它也返回 1,当它是 0 时,这与正常的 C 约定相反(当它是素数时返回 1 或 true;当不是素数时返回 0 或 false)。但是,这些不是您的直接问题。
-
@Yunnosch 什么都没有
标签: c