求多個數的最小公倍數或最大公約數

2021-06-08 06:35:31 字數 3961 閱讀 4214

本文對多個數最小公倍數和多個數最大公約數之間的關係進行了**。將兩個數最大公約數和最小公倍數之間的關係擴充套件到n個數的情況。在此基礎上,利用求n個數最大公約數的向量變換演算法計算多個數的最小公倍數。

1.  多個數最小公倍數和多個數最大公約數之間的關係

令p為a1,a2,..,an中乙個或多個數的素因子,a1,a2,..,an關於p的次數分別為r1,r2,..,rn,在r1,r2,..,rn中最大值為rc1=rc2=..=rcm=rmax,最小值為rd1=rd2=..=rdt=rmin,即r1,r2,..,rn中有m個數所含p的次數為最大值,有t個數所含p的次數為最小值。例如:4,12,16中關於素因子2的次數分別為2,2,4,有1個數所含2的次數為最大值,有2個數所含2的次數為最小值;關於素因子3的次數分別為0,1,0,有1個數所含3的次數為最大值,有2個數所含3的次數為最小值。

對最大公約數有,只包含a1,a2,..,an中含有的素因子,且每個素因子次數為a1,a2,..,an中該素因子的最低次數,最低次數為0表示不包含[1]。

對最小公倍數有,只包含a1,a2,..,an中含有的素因子,且每個素因子次數為a1,a2,..,an中該素因子的最高次數[1]。

定理1:[a1,a2,..,an]=m/(m/a1,m/a2,..,m/an),其中m為a1,a2,..,an的乘積,a1,a2,..,an為正整數。

例如:對於4,6,8,10,有[4,6,8,10]=120,而m=4*6*8*10=1920,m/(m/a1,m/a2,..,m/an) =1920/(6*8*10,4*8*10,4*6*10,4*6*8)=1920/16=120。

證明:m/a1,m/a2,..,m/an中p的次數都大於等於r1+r2+..+rn-rmax,且有p的次數等於r1+r2+..+rn-rmax的。這是因為

(1)       m/ai中p的次數為r1+r2+..+rn-ri,因而m/a1,m/a2,..,m/an中p的次數最小為r1+r2+..+rn-rmax。

(2)       對於a1,a2,..,an中p的次數最大的項aj(1項或多項),m/aj中p的次數為r1+r2+..+rn-rmax。

或者對於a1,a2,..,an中p的次數最大的項aj,m/aj中p的次數小於等於m/ak,其中ak為a1,a2,..,an中除aj外其他的n-1個項之一,而m/aj中p的次數為r1+r2+..+rn-rmax。

因此,(m/a1,m/a2,..,m/an)中p的次數為r1+r2+..+rn-rmax,從而m/(m/a1,m/a2,..,m/an)中p的次數為rmax。

上述的p並沒有做任何限制。由於a1,a2,..,an中包含的所有素因子在m/(m/a1,m/a2,..,m/an)中都為a1,a2,..,an中的最高次數,故有[a1,a2,..,an]=m/(m/a1,m/a2,..,m/an)成立。

得證。

定理1對於2個數的情況為[a,b]=ab/(ab/a,ab/b)=ab/(b,a)=ab/(a,b),即[a,b]=ab/(a,b)。因此,定理1為2個數最小公倍數公式[a,b]=ab/(a,b)的擴充套件。利用定理1能夠把求多個數的最小公倍數轉化為求多個數的最大公約數。

2.多個數最大公約數的演算法實現

根據定理1,求多個數最小公倍數可以轉化為求多個數的最大公約數。求多個數的最大公約數(a1,a2,..,an)的傳統方法是多次求兩個數的最大公約數,即

(1)       用輾轉相除法[2]計算a1和a2的最大公約數(a1,a2)

(2)       用輾轉相除法計算(a1,a2)和a3的最大公約數,求得(a1,a2,a3)

(3)       用輾轉相除法計算(a1,a2,a3)和a4的最大公約數,求得(a1,a2,a3,a4)

(4)       依此重複,直到求得(a1,a2,..,an)

上述方法需要n-1次輾轉相除運算。

本文將兩個數的輾轉相除法擴充套件為n個數的輾轉相除法,即用一次n個數的輾轉相除法計算n個數的最大公約數,基本方法是採用反覆用最小數模其它數的方法進行計算,依據是下面的定理2。

定理2:多個非負整數a1,a2,..,an,若aj>ai,i不等於j,則在a1,a2,..,an中用aj-ai替換aj,其最大公約數不變,即 (a1,a2,..,aj-1,aj,aj+1,..an)=(a1,a2,..,aj-1,aj-ai,aj+1,..an)。

例如:(34,24,56,68)=(34,24,56-34,68)=(34,24,22,68)。

證明:根據最大公約數的交換律和結合率,有

(a1,a2,..,aj-1,aj,aj+1,..an)= ((ai,aj),(a1,a2,..,ai-1,ai+1,..aj-1,aj+1,..an))(i>j情況),或者

(a1,a2,..,aj-1,aj,aj+1,..an)= ((ai,aj),(a1,a2,..,aj-1,aj+1,..ai-1,ai+1,..an))(i

而對(a1,a2,..,aj-1,aj-ai,aj+1,..an),有

(a1,a2,..,aj-1,aj-ai,aj+1,..an)= ((ai, aj-ai),( a1,a2,..,ai-1,ai+1,.. aj-1,aj+1,..an))(i>j情況),或者

(a1,a2,..,aj-1,aj-ai,aj+1,..an)= ((ai, aj-ai),( a1,a2,..,aj-1,aj+1,.. ai-1,ai+1,..an))(i

因此只需證明(ai,aj)=( ai, aj-ai)即可。

由於(aj-ai)= aj-ai,因此ai,aj的任意公因子必然也是(aj-ai)的因子,即也是ai,( aj-ai)的公因子。由於aj = (aj-ai)+ai,因此ai,( aj-ai)的任意公因子必然也是aj的因子,即也是ai,aj的公因子。所以,ai,aj的最大公約數和ai,(aj-ai) 的最大公約數必須相等,即(ai,aj)=(ai,aj-ai)成立。

得證。

定理2類似於矩陣的初等變換,即

令乙個向量的最大公約數為該向量各個分量的最大公約數。對於向量進行變換:在乙個分量中減去另乙個分量,新向量和原向量的最大公約數相等。

求多個數的最大公約數採用反覆用最小數模其它數的方法,即對其他數用最小數多次去減,直到剩下比最小數更小的餘數。令n個正整數為a1,a2,..,an,求多個數最大共約數的演算法描述為:

(1)       找到a1,a2,..,an中的最小非零項aj,若有多個最小非零項則任取乙個

(2)       aj以外的所有其他非0項ak用ak mod aj代替;若沒有除aj以外的其他非0項,則轉到(4)

(3)       轉到(3)

(4)       a1,a2,..,an的最大公約數為aj

例如:對於5個數34, 56, 78, 24, 85,有

(34, 56, 78, 24, 85)=(10,8,6,24,13)=(4,2,6,0,1)=(0,0,0,0,1)=1,

對於6個數12, 24, 30, 32, 36, 42,有

(12, 24, 30, 32, 36, 42)=(12,0,6,8,0,6)=(0,0,0,2,0,6)=(0,0,0,2,0,0)=2。

3. 多個數最小共倍數的演算法實現

求多個數最小共倍數的演算法為:

(1)       計算m=a1*a2*..*an

(2)       把a1,a2,..,an中的所有項ai用m/ai代換

(3)       找到a1,a2,..,an中的最小非零項aj,若有多個最小非零項則任取乙個

(4)       aj以外的所有其他非0項ak用ak mod aj代替;若沒有除aj以外的其他非0項,則轉到(6)

(5)       轉到(3)

(6)       最小公倍數為m/aj

上述演算法在vc環境下用高階語言進行了程式設計實現,通過多組求5個隨機數最小公倍數的例項,與標準方法進行了比較,驗證了其正確性。標準計算方法為:求5個隨機數最小公倍數通過求4次兩個數的最小公倍數獲得,而兩個數的最小公倍數通過求兩個數的最大公約數獲得。

5.結論

計算多個數的最小公倍數是常見的基本運算。n個數的最小公倍數可以表示成另外n個數的最大公約數,因而可以通過求多個數的最大公約數計算。求多個數最大公約數可採用向量轉換演算法一次性求得

求最大公約數,最小公倍數

歐幾里德遞迴演算法,大數對小數取餘直到小數為0,大數為最大公約數 param m param n return static int maxcommondivisor euclid recursion int m,int n return m 劉徽兩數相減直到兩數相等,等數為最大公約數 param ...

求分數的最大公約與最小公倍數

求分數的最大公約與最小公倍數 先將各個分數化為a b的形式 假分數 或真分數形式 用各個分數的分母的最大公因數作所求最小公倍數的分母 用各個分數的分子的最小公倍數數作所求最小公倍數的分子 先將各個分數化為a b的形式 真假分數無所謂 用各個分數的分母的最小公倍數做最大公約數的分母 用各個分數的分子的...

求分數的最大公約與最小公倍數

求分數的最大公約與最小公倍數 先將各個分數化為a b的形式 假分數 或真分數形式 用各個分數的分母的最大公因數作所求最小公倍數的分母 用各個分數的分子的最小公倍數數作所求最小公倍數的分子 先將各個分數化為a b的形式 真假分數無所謂 用各個分數的分母的最小公倍數做最大公約數的分母 用各個分數的分子的...