最大公約數的3種演算法

2021-07-14 13:01:25 字數 970 閱讀 1406

最大公約數的3種演算法

前言:關於最大公倍數,其本質是輾轉相除法,又名歐幾里德演算法

設兩數為a、b(a>b),求a和b最大公約數(a,b)的步驟如下:用a除以b,得a÷b=q......r1(0≤r1)。若r1=0,則(a,b)=b;若r1≠0,則再用b除以r1,得b÷r1=q......r2 (0≤r2).若r2=0,則(a,b)=r1,若r2≠0,則繼續用r1除以r2,……如此下去,直到能整除為止。其最後乙個為被除數的餘數的除數即為(a, b)。

例如:a=25,b=15,a/b=1......10,b/10=1......5,10/5=2.......0,最後乙個為被除數餘數的除數就是5,5就是所求最大公約數。

#include "stdio.h"

#define min(num1,num2) (num1>=num2)?(num2):(num1)//最小值

//該演算法效率高 ,思想是兩個數做求餘運算,當且僅當餘數如果可以被被除數整除的話則該數就是最大公約數

int getcomfactorex(int num1,int num2)

return num1;}

//普通演算法求最大公約數,一定是從最小的那個數往下檢測,如果往下的數中有乙個同時滿足整除即是最大公約數

int getcomfactor(int num1,int num2)//普通演算法 

for(imaxfactor = num1;imaxfactor>0;imaxfactor--)

return imaxfactor;}

//遞迴法求最大公約數,遞迴存在漏洞,沒有做使用者合理性輸入的檢測

int getcomfactorre(int num1,int num2) 

//執行測試,結果都為4,平台c-free

int main(void)

最大公約數簡便演算法 最大公約數演算法

1 查詢約數法 先分別找出每個數的所有約數,再從兩個數的約數中找出公有的約數,其中最大的乙個就是 最大公約數 例如,求 12 和 30 的最大公約數 12 的約數有 1 2 3 4 6 12 30 的約數有 1 2 3 5 6 10 15 30 12 和 30 的公約數有 1 2 3 6,其中 6 ...

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

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

演算法 最大公約數

最大公約數是乙個很經典的數學問題,對於這個問題有四種通用的解法,質因數分解法,短除法,不過比較常用的還是輾轉相除法,演算法出自於歐幾裡的著作 幾何原本 還有乙個就是出自 九章算術 的更相減損法,一般實現的時候都是通過輾轉相除法實現,基本的邏輯是這樣的 假設把a和b的最大公約數表示成為f a,b 並且...