如何求出最大公約數

2021-10-05 23:00:13 字數 1295 閱讀 3610

求最大公約數你有什麼辦法

第一種方法還是我們的暴力法,但是在兩個數的資料比較大的時候這種方法就不不好用了,還是先寫**

#include

using

namespace std;

intgreatest_common_divisor

(int a,

int b)

return1;

}int

main()

這種方法的弊端是當 求 10000和10001的最大公約數時就要迴圈4999次

但是不得不佩服現在的計算機,結果還是秒出,改進的方法

方法2:輾轉相除法

兩個整數a 和 b, 他們 的最大公約數等於a除以b的餘數c和b之間的最大公約數

#include

using

namespace std;

intgreatest_common_divisor

(int a,

int b)

intmain()

但是當a,b資料比較大的時候,取模運算也比較複雜,

第三種方法: 更相減損術

兩個整數a 和 b, 他們 的最大公約數等於a減b的差值c 和較小數b之間的最大公約數

#include

using

namespace std;

intgreatest_common_divisor

(int a,

int b)

intmain()

上面的那種方法避免了大整數取模的麻煩,但是 如果兩個數是 10000和1的話,那麼就要運算9999次,

第四種方法 位運算 在更相減損術的基礎上使用移位運算

當 a b 都為偶數的時候,greatest_common_divisor(a>>1,b>>1)

當 a為偶數 b 都為奇數的時候 greatest_common_divisor(a>>1,b)

當 a為奇數 b 都為偶數的時候 greatest_common_divisor(a,b>>1)

當 a b為奇數的時候,利用更相減損術,就可以變出偶數了,然後依照上述過程進行遞迴

#include

using

namespace std;

intgreatest_common_divisor

(int a,

int b)

}int

main()

最大公約數

1.執行最大公約數的常用演算法,並新增異常處理模組 如輸入非法等 在基礎程式的基礎上,可以考慮手動輸入所有數字或者利用隨機數產生數字,分別加入異常處理模組。注 隨機數的產生方法 srand 的作用是提供乙個種子。然後呼叫rand 其格式為int rand void 它會根據提供給srand 的種子值...

最大公約數

最大公因數 greatest common divisor 也稱最大公約數 最大公因子,指兩個或多個整數共有約數中最大的乙個。a,b的最大公約數記為 a,b 同樣的,a,b,c的最大公約數記為 a,b,c 多個整數的最大公約數也有同樣的記號。求最大公約數有多種方法,常見的有質因數分解法 短除法 輾轉...

最大公約數

求兩數的最大公約數 簡單嗎?簡單!用多種方法求,可以嗎?emmmmm.應該可以吧?相信絕大多數人都知道求最大公約數的如下 所示的這種方法 include includeint commondivisor int x,int y min return min int main 先判斷兩個數的大小,將較...