計算最大公約數和最小公倍數的五種演算法

2021-10-22 17:39:24 字數 1934 閱讀 2708

2 窮舉法

3 輾轉相除法(歐幾里得演算法)

4 輾轉相減法 (更相減損法,九章算術, 尼考曼徹斯法)

5 stein演算法(輾轉相減優化版)

短除法求最小公倍數,先用這幾個數的公約數去除每個數,再用部分數的公約數去除,並把不能整除的數移下來,一直除到所有的商中每兩個數都是互質的為止,然後把所有的除數和商連乘起來,所得的積就是這幾個數的最小公倍數,例如,求12、15、18的最小公倍數。

#include

#include

intgreatestcommondivisor

(int a,

int b)

}return divisor;

}int

lowestcommonmutiply

(int a,

int b)

intmain()

窮舉法求兩個正整數的最大公約數的解題步驟:從兩個數中較小數開始由大到小列舉,直到找到公約數立即中斷列舉,得到的公約數便是最大公約數。

圖示:

#include

#include

intgreatestcommondivisor

(int a,

int b)

return divisor;

}int

lowestcommonmutiply

(int a,

int b)

intmain()

#include

#include

intgreatestcommondivisor

(int a,

int b)

return small;

}int

lowestcommonmutiply

(int a,

int b)

intmain()

更精簡的演算法,使用了異或:

#include

#include

intgreatestcommondivisor

(int a,

int b)

else

}int

lowestcommonmutiply

(int a,

int b)

intmain()

#include

#include

intgreatestcommondivisor

(int a,

int b)

int delta;

delta = big - small;

while

(delta != small)

divisor *

= delta;

return divisor;

}int

lowestcommonmutiply

(int a,

int b)

intmain()

#include

#include

intgreatestcommondivisor

(int a,

int b)

else

if(a %2==

0)else

if(b %2==

0)else

}return divisor;

}int

lowestcommonmutiply

(int a,

int b)

intmain()

最大公約數 最小公倍數

求最大公約數最直接的辦法是從兩數中較小數與2之間的所有整數中乙個乙個的找。但這個方法有點浪費。有兩種有名的方法 1.輾轉相除法2.更相減損之術這兩種方法比較有名,而且現在人教版的高中數學中已經介紹了這兩種方法。下面這個是第2個,因為它只需要加減法就可以,效率高。int maxfactor unsig...

最小公倍數 最大公約數

求最小公倍數演算法 最小公倍數 兩整數的乘積 最大公約數 求最大公約數演算法 1 輾轉相除法 有兩整數a和 b a b得餘數c 若c 0,則 b即為兩數的最大公約數 若c 0,則 a b,b c,再回去執行 例如求27和 15的最大公約數過程為 27 15 餘12 15 12餘3 12 3餘0 因此...

最大公約數,最小公倍數

兩個數最大公約數 輾轉相除法 在數學中,輾轉相除法,又稱歐幾里得演算法,是求最大公約數的演算法。兩個整數的最大公約數是能夠同時整除它們的最大的正整數。輾轉相除法基於如下原理 兩個整數的最大公約數等於其中較小的數和兩數的差的最大公約數。例如 用 a,b 來表示a和b的最大公約數。已知a,b,c為正整數...