#include <stdio.h>
int iscoprime(int num1, int num2);
int main() {
int x;
x = iscoprime( 7, 8 );
printf("%d",x);a
}
int iscoprime(int num1, int num2) {
int r = 0;
int gcd = 0;
int i;
for(i = 0; (i < num1) || (i < num2) ; ++i) {
if( (num1 % i == 0) && (num2 % i == 0)) {
gcd = i;
}
}
if ( gcd == 1 ) r = 1;
return r;
}
错误:此程序已停止.. ??? :(
答案 0 :(得分:2)
你的程序存在一些缺陷。
1)for
循环以i
值0开头。因此,在第一次迭代中,floating point exception将发生。它应该从1
开始。
2)你的问题表明该计划正在寻找gcd
。这似乎不是问题。在我看来,它正在发现给定的数字是否是共同素数。
如果是GCD程序,return
语句应为
return gcd; //without the previous if condition
答案 1 :(得分:0)
目前还不清楚你希望你的返回值来自iscoprime函数。看起来它返回最大公约数,然后检查它是否为1,然后两个输入是共同素数,否则它使用r的初始值0,因此意味着如果数字是共素且0将打印1如果他们不是。你的for循环没有多大意义。两个数字的最大公约数可以是两个值中较低的一个。我会在你的情况下以这个值开始你的循环,在你的情况下为7并且在每次迭代时递减i并且当两个数字除以i而没有余数时返回i。这将是你最大的公约数,如果它是1,那么你的两个数字是共同的。
虽然这个实现适用于小数字,但如果数字非常大,我会看一下https://en.wikipedia.org/wiki/Euclidean_algorithm可以非常快速地计算GCD,如果GCD那么仍然适用是1,两个输入是共同素数。