如何計算兩個數的最大公約數?用世界上一個很古老的算法就可以

2021-01-16 決策不拍頭

不管是在學習或者生活中,我們經常會遇到要求兩個數的最大公約數的問題。

最大公約數

那麼,什麼是公約數?什麼是最大公約數?

公約數,顧名思義,就是能被兩個數同時整除的一些數。而最大公約數就是這些數中的最大值。

舉個例子,比如我們要求96和50的最大公約數。

應該怎麼做呢?

首先,我們要將96和50分別進行質因式分解,也就是將它們寫成質數乘積的形式。

那何為質數?

質數,又叫素數。指只能被自身和1整除的數。

那麼96=2x2x2x2x2x3, 50=2x5x5

然後,找出質因式中二者共同的質數。對比上面兩個式子,我們發現二者共同的只有2.

因此,96和50的最大公約數就是2.

如果兩個數相同的質因數多於1個呢?那麼最大公約數就是這些質因數的乘積。

再來舉個例子,我們要求90和50的最大公約數。

90=2·3·3·5, 50=2·5·5

二者相同的質因數有2和5,因此它們的最大公約數就是2·5=10.

上面介紹的是我們傳統的方法,好像也沒什麼問題,操作起來也簡單。

但這隻適用於比較小的數字,如果數字很大,那麼用這種方法就會費時又費力。

這時,就需要用到一個世界上最古老的算法——歐幾裡得算法了。

歐幾裡得算法

歐幾裡得算法,就叫輾轉相除法。因為最早被發現記錄於歐幾裡得的著作中,因此就以其名字來命名。這個算法就是用來求兩個數的最大公約數的。

接下來,我們就來看看歐幾裡得算法的具體步驟。

比如我們要求1234和678的最大公約數。

首先,我們要計算1234 mod 678,這個mod是取餘運算符,這個式子的結果就是1234除以678的餘數。

即1234 mod 678 = 556

繼續計算678 mod 556 = 122

繼續556 mod 122 = 68

繼續122 mod 68 = 54

繼續68 mod 54 = 14

繼續54 mod 14 = 12

繼續14 mod 12 = 2

繼續12 mod 2 = 0

當所得的餘數為0時,最後一次運算中的除數就是我們要求的最大公約數。

因此,1234和678的最大公約數就是2。

原理解析

那麼,為什麼上面運算的結果就會得到最大公約數呢?

我們畫個圖來說明。

如圖,我們分別用對應長度的線段來表示1234和678。

我們並不知道最大公約數是多少,但我們知道的是這兩個數一定是最大公約數的整數倍。

這裡我們設最大公約數為k,那麼就可以把線段等分成很多小份,每一份的長度為k。

那麼,1234除以678的餘數556自然也可以用刻度為k的小段來構成。

同理,678除以556的餘數122同樣可以用刻度為k的小段來構成。

如此循環下去,直到只有1個線段k,此時餘數為0。對應的線段長度就是最大公約數2。

在計算較大數的最大公約數時,歐幾裡得算法是很高效的。

這就是今天的全部內容,覺得有用可以點個讚!

相關焦點

  • python求兩個數的最大公約數
    前言提到最大公約數,那麼就不得不說什麼是公約數,它是一個能被若干個整數同時均整除的整數。如果一個整數同時是幾個整數的約數,稱這個整數為它們的「公約數」;公約數中最大的稱為最大公約數。對任意的若干個正整數,1總是它們的公因數。
  • 雲計算開發學習實例:Python3 最大公約數算法
    Python3中最大公約數算法可以用以下代碼來實現:執行以上代碼輸出結果為:當最小值為最大公約數時,直接返回;2. 當最小值不為最大公約數時,最大公約數不會大於最小值的1/2;3. 求最大公約數理應從大到小循環遞減求最大。
  • 偽從零開始學算法 - 2.2 求最大公約數
    從人類的做法推導我們計算最大公約數的時候,通常用短除法來計算。具體的方法是:同時讓這些數除以一個比較小的公約數,得到的結果再這樣操作,直到找不到大於等於2的公約數;將除數相乘即得到最大公約數。比如:計算最大公約數流程圖(3)已經非常複雜了。實際應用中,我們更多的是計算兩個數之間的最大公約數。這樣,流程圖可以簡化如下:
  • 漫畫算法:輾轉相除法是什麼鬼?
    輾轉相除法, 又名歐幾裡得算法(Euclidean algorithm),目的是求出兩個正整數的最大公約數。它是已知最古老的算法, 其可追溯至公元前300年前。這條算法基於一個定理:兩個正整數a和b(a>b),它們的最大公約數等於a除以b的餘數c和b之間的最大公約數。比如10和25,25除以10商2餘5,那麼10和25的最大公約數,等同於10和5的最大公約數。
  • 常州市賽題 公約數公倍數
    最近小T對最大公約數和最小公倍數產生了濃厚的興趣,並學會了用輾轉相除法求兩個自然數的最大公約數。但小T並不滿足於會用輾轉相除法,他是一個酷愛鑽研的人,無論學什麼都喜歡刨根問底,他想能不能把這個問題反過來:即已知兩個自然數A和B的最大公約數G和最小公倍數L,問有多少對滿足條件的自然數對A和B?
  • 2017福建招警行測答題技巧:「消減法」求最大公約數和最小公倍數
    2017福建招警行測答題技巧:「消減法」求最大公約數和最小公倍數 如有任何報考疑問,請加入Q群:2017福建招警交流群 243753182,求幾個數的最大公約數,除了我們熟知的短除法和分解質因數法之外,還有《幾何原本
  • 算法講解——輾轉相除法
    在閱讀這篇文章前,先問你們一個小學問題:如何求兩個整數的最大公約數?
  • 比較直觀地歐幾裡得算法與更相減損術證明
    歐幾裡得算法,也叫做輾轉相除法。是偉大的歐幾裡得在《幾何原本》中描述的一種求兩個整數最大公約數的高效算法。是最古老的算法之一。相對應的,中國古代《九章算術》中記載的更相減損術也是求兩個整數最大公約數的方法。但是更相減損術的效率卻沒有歐幾裡得算法的高。
  • 小學五年級奧數——最大公約數和最小公倍數
    幾個數公有的約數,叫做這幾個數的公約數;其中最大的一個,叫做這幾個數的最大公約數。自然數a、b的最大公約數可記作(a,b)   幾個數公有的倍數,叫做這幾個數的公倍數;其中最小的一個,叫做這幾個數的最小公倍數。
  • 怎樣可以很快算出最大公約數和最小公倍數?後悔知道得太晚了!
    怎樣可以很快算出最大公約數和最小公倍數?後悔知道的太晚了!求最小公倍數的基礎是求最大公約數。求最大公約數的算法是「更相減損法」或「輾轉相除法」。「更相減損法」是最早記錄於《九章算術》中的中國古法,與古希臘歐幾裡得發現的「輾轉相除法」只是形式略有不同,但其實還是一回事。
  • 10.裴蜀定理和歐幾裡得算法快速求解倒水問題
    接上題:3升、5升的無刻度水杯是否可以倒出正好4升水?或者問:a升、b升的無刻度水杯是否可以倒出正好c升水?根據題目的要求,我們只需要判斷是否可行,而不需要給出倒水的步驟。怎麼求倒水的步驟,在介紹BFS(廣度優先搜索)算法的時候再講。雖然水杯沒有刻度, 但我們總是可以倒入整杯的水 +a,+b,或者倒出整杯的水 -a,-b。
  • 細數那些改變計算技術的偉大算法
    在過去,很多巧妙的計算機算法設計,改變了我們的計算技術。通過操作標準計算機中提供的中間運算符,可以產生很多的高效函數。這些函數導致了電腦程式的複雜性和多樣性,這也是今天計算機時代快速發展的重要原因。如下所示,我們列舉了一些算法,它們改變了我們的計算機使用。
  • 最大公約數:統一戰線的實質與功能
    一、統一戰線實質的充分體現  最大公約數(Greatest Common Divisor)是一個數學概念,也稱作最大公因數、最大公因子。它是指兩個或多個整數共有約數中最大的一個。把最大公約數這一概念引入統一戰線理論,是對統一戰線成員(即同盟者)的最大共同利益的精到表述。我們可從以下3個方面理解統一戰線理論中最大公約數這一概念的深刻含義。
  • 小學數學1-6年級公式大全,孩子的暑假作業肯定用得上!
    乘法分配律:兩個數的和同一個數相乘,可以把兩個加數分別同這個數相乘,再把兩個積相加,結果不變。如:(2+4)×5=2×5+4×56. 除法的性質:在除法裡,被除數和除數同時擴大(或縮小)相同的倍數,商不變。 0除以任何不是0的數都得0。
  • 小學數學專題總結——數和計算
    數位表當表達「不完整」的概念時,不能用整數來表示,則可用小數和分數來表示。如上圖所示,每一個小數都包含整數部分、小數點、小數部分,而小數部分則分為十分位、百分位、千分位、萬分位等等。如下圖所示,分數可寫成分數線上下兩側分隔的形式(其中a為分子,b為分母),且分數也可以認為是「分子除以分母」(分母不能為0)。百分數在小學階段也很常用,用百分號「%」來表示,可以認為是分母為100的分數,也可以認為是小數的小數點向右移動兩位後再加上一個百分號「%」得到。百分數一般用於表示年利率、稅率、統計表中某一分項佔總數的百分比等場合。
  • 最小公倍數與最大公約數
    以上內容也都屬於計算範疇。讓我們繼續藉助分解質因數來理解公倍數吧。4和6分別進行分解質因數,4=2×26=2×3由此可見,雙方共有的質因數(2),乘以其餘的質因數(2和3),得出的結果(2×2×3)就是最小公倍數。通過分解質因數來思考4和6的倍數,可用表格進行歸納,我們會發現「2×2×3」及其倍數是共有的。
  • 2014國家公務員考試行測數量關係:最大公約數
    請考生密切關注廣東華圖教育官網(按CTRL+D收藏本頁)   最大公約數與最小公倍數問題   考試中的最大公約數與最小公倍數問題是運用最大公約數與最小公倍數求解計算的題 型,考生必須了解最大公約數與最小公倍數的意義,熟練掌握,靈活運用,難題巧解。
  • 中日韓領導人聚首成都 三國如何尋求合作最大公約數?
    中新社成都12月22日電 題:中日韓領導人聚首成都 三國如何尋求合作最大公約數? 中新社記者 張子揚 12月24日,中國國務院總理李克強將在四川成都主持召開第八次中日韓領導人會議,並分別會見韓國總統文在寅、日本首相安倍晉三。
  • C程序設計的常用算法
    算法的描述:是對要解決一個問題或要完成一項任務所採取的方法和步驟的描述,包括需要什麼數據(輸入什麼數據、輸出什麼結果)、採用什麼結構、使用什麼語句以及如何安排這些語句等。通常使用自然語言、結構化流程圖、偽代碼等來描述算法。