C語言中求最大公約數的演算法(三種)

2021-08-13 09:45:16 字數 2106 閱讀 8647

利用指標把三個數從大到小輸出

最大公約數:指某幾個整數共有約數中最大的乙個

方法一:相減法 也叫更相減損法

思路:1、如果a > b a = a - b;

2、如果b > a b = b - a;

3、假如a = b,則 a或 b是最大公約數;

4、如果a != b;則繼續從一開始執行;

5、也就是說迴圈的判斷條件為a != b,直到a = b時,迴圈結束。

舉例說明:

a = 28 b = 21

a>b

則 a = a - b = 28 - 21 = 7

b = 21
b>a

則 b = b-a = 21 - 7 = 14

a = 7
b>a

則 b = b - a = 14 - 7 = 7

a = 7
此時 a = b =7

迴圈結束

**展示

#define _crt_secure_no_warnings 1

#include

int main()

結果展示

方法二

思路:1.選出a,b中最小的乙個數字放到c中

2.分別用a,b對c求餘數,即看是否能被c整除

3.直到a,b同時都能被c整除

4.如不能整除,c– (c的值減一) 繼續從2開始執行

5.也就是說該迴圈的判斷條件為 a,b能否同時被c整除,只要有乙個數不能被c整除,迴圈繼續執行

舉例說明:

a = 9 b = 4

將其中最小的數字賦予c

c = 4

a%c = 1 ,b%c = 0 a,b不能同時被c整除 迴圈繼續

c– ,c = 3

a%c = 0 ,b%c = 1 a,b不能同時被c整除 迴圈繼續

c– ,c = 2

a%c = 1 ,b%c = 0 a,b不能同時被c整除 迴圈繼續

c– ,c = 1

a%c = 0 ,b%c = 0 a,b同時被c整除 迴圈結束 c是a和b的最大公約數

**展示

#define _crt_secure_no_warnings 1

#include

int main()

printf("最大公約數為: %d \n",c);

}return

0;}

結果展示

方法三:輾轉相除法

思路:

1.將兩整數求餘 a%b = c

2.如果c = 0;則b為最大公約數

3.如果c != 0,則 a = b;b = c;繼續從1開始執行

4.也就是說該迴圈的是否繼續的判斷條件就是c是否為0

舉例說明:

a = 21 b = 28

c = a%b = 21%28 = 21, 則c = 21 此時c不為0

執行 a = b , b = c , a = 28 ,b = 21

c = a%b = 28%21 = 7 ,則c = 7 此時c不為0

執行 a = b , b = c , a = 21 , b = 7

c = a%b = 21%47 = 0 ,則c = 0 迴圈結束

**展示:

#define _crt_secure_no_warnings 1

#include

int main()

printf("最大公約數為: %d\n",b);

}return

0;}

結果展示

用三種演算法求最大公約數

窮舉法 將兩個數a,b中較小的值賦給q,然後a除q,b也除q,若兩者的餘數同時為0 時,那麼q就是兩者的最大公約數。若不等於0,則將q 1,然後繼續a除q,b 除q,直至餘數同時為0。include void qongjufa printf 最大公約數為 d n m,n,q 相除法 將兩數ab相除,...

最大公約數簡便演算法 求最大公約數的4種演算法

for z 0 z 10000000 z 迴圈只是為了增加程式的執行時間,讓我們體會演算法的時間複雜度。演算法一 短除法 想法,採用短除法找出2個數的所有公約數,將這些公因子相乘,結果就是2個數的最大公約數。找公因子,只能使用蠻力法 include include void main int m 2...

最大公約數三種方法

一 輾轉相除法 輸入兩個數a和b,如果a和b都小於等於0,則結束。否則,進入迴圈 c b a,b a,a c 當a等於0時,結束迴圈,輸出最大公約數b.二 輾轉相減法 輸入兩個數a和b,當a不等於b時,進入迴圈 當a b時,a a b 否則,b b a 直到a b時,結束迴圈,輸出最大公約數a。三 ...