2015-08-22 27 views
-3
#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; 
} 

錯誤:此程序已停止.. ??? :(檢查互質數,用C語言prgramming

+0

'%i' ==>'%0','i = 0'應該是'i = 1' – BLUEPIXY

+0

您的代碼是用來尋找gcd還是數字是否與共素? – Haris

+1

假設這是作業,是否沒有給出通常用於查找gcd(最大公約數)的算法的描述?你也不知道兩個數字是否相互矛盾,那麼他們的gcd是1?您可以在維基百科或其他網站上搜索這些信息。 – rcgldr

回答

2

你的程序有一些缺陷。

1)for循環與i值0,所以開始時,在第一次迭代本身,floating point exception會發生。它應該從1開始。

2)您的問題表明該程序正在查找gcd。這似乎並不是問題。在我看來,它是發現給定的數字是否是共素數。

如果一個GCD計劃,return的說法應該是

return gcd; //without the previous if condition 
+0

是的..該計劃的主要工作是找到如果這兩個數字是共素或不...我的壞..但這是我的第一個問題,在任何論壇上尋求我的計劃的幫助,所以我只是輸入任何被接受的標題而不想......並且謝謝! :)我意識到我的計劃中存在哪些缺陷。 –

+0

@GauravGrover現在在工作嗎? – Haris

0

不明確的,你希望你的返回值從iscoprime功能是什麼意思。它看起來像返回最大公約數,然後檢查它是否爲1,那麼這兩個輸入是共素,否則它使用r的初始值0,因此這意味着如果數字是共素數和0,它將打印1如果他們不是。你的for循環不太合理。兩個數的最大最大公約數可以是兩個值中較小的一個。我會在這個值開始你的for循環,7在你的情況下,並在每次迭代時遞減i,並且當兩個數字除以i餘數時返回i。如果它是1,那麼這將是你的最大公約數,那麼你的兩個數字是共素數。

雖然這個實現對於小數字來說很好,但如果數字會非常大,我會看一下https://en.wikipedia.org/wiki/Euclidean_algorithm,它可以非常快地計算GCD,如果GCD是1,那麼它仍然適用,這兩個輸入是共素。