用C编程语言检查共同素数

时间:2015-08-22 09:42:26

标签: c math

#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;
}

错误:此程序已停止.. ??? :(

2 个答案:

答案 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,两个输入是共同素数。

相关问题