C語言最大公約數求解辦法及時間複雜度比較

2021-10-25 01:39:07 字數 1737 閱讀 6004

— 最大公因數,也稱最大公約數、最大公因子,指兩個或多個整數共有約數中最大的乙個。最大公約數作為數學中常見的數學概念,在c語言中也可以用多種辦法來求解。不同的辦法理解難度和時間複雜度均不同。

以下我來介紹幾種求最大公約數的方法:

此方法是理解難度最低的辦法,就是兩個數從兩個數字的較小者迴圈遞減到1,看第乙個滿足兩個數取餘數皆為0的數字,並輸出。

int num1=0;

int num2=0;

printf

("請輸入兩個數字求最大公約數,用空格間隔:");

scanf

("%d %d"

,&num1,

&num2)

;int min=num1;

if(num1>num2)

//把最小的數字賦值給min

int time=0;

//在迴圈中設定乙個變數記錄時間複雜度

此方法也叫歐幾里得演算法,利用數學中的乙個規則來求解。

兩個數字相除取餘,(num1%num2)第乙個數字退出,第二個下一輪第乙個,餘數做第二個,一直迴圈。原理是基於兩個整數的最大公約數等於其中較小的數和兩數的相除餘數的最大公約數。

我們可以用乙個迴圈來表示該演算法的輾轉相除步驟。具體步驟如下:

int num1,num2;

printf

("請輸入兩個數字求最大公約數,用空格間隔:");

scanf

("%d %d"

,&num1,

&num2)

;int i=0;

//餘數

int time=0;

//在迴圈中設定乙個變數記錄時間複雜度

while

((i=num1%num2)!=0

)printf

("它們的最大公約數是:%d\n 時間複雜度是%d:\n"

,num2,time)

;//輸出最大公約數和時間複雜度

更相減損法:也叫更相減損術,是出自《九章算術》的一種求最大公約數的演算法,它原本是為約分而設計的,但它適用於任何需要求最大公約數的場合。

輸入兩個數,用較大的減去較小的,餘數賦值在進行相減,直到數字相同,為最大公約數。

具體的**如下:

int num1, num2, time=0;

//在迴圈中設定乙個變數記錄時間複雜度

printf

("請輸入兩個數字求最大公約數,用空格間隔:");

scanf

("%d %d"

,&num1,

&num2)

;while

(num1 != num2)

printf

("它們的最大公約數是:%d\n 時間複雜度是%d:\n"

時間複雜度上和具體的例子有關,但暴力窮舉法是不推薦使用的(一般都很大…)

求解最大公約數問題

最大公因數,又稱最大公約數。是指 n 2 個自然數 a1,a2,an 的最大公因數。通常有兩種表示方式 它們的所有公因數中最大的那乙個 如果自然數 m 是這 n 個自然數的公因數,且這 n 個數的任意公因數都是 m 的因數,就稱 m 是這 n 個數的最大用因數。通常國內的記述方式為 a1,a2,an...

最大公約數

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

最大公約數

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