<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        使用Python求解最大公約數(shù)的實現(xiàn)方法

        來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 14:34:44
        文檔

        使用Python求解最大公約數(shù)的實現(xiàn)方法

        使用Python求解最大公約數(shù)的實現(xiàn)方法:1. 歐幾里德算法 歐幾里德算法又稱輾轉(zhuǎn)相除法, 用于計算兩個整數(shù)a, b的最大公約數(shù)。其計算原理依賴于下面的定理: 定理: gcd(a, b) = gcd(b, a mod b) 證明: a可以表示成a = kb + r, 則r = a mod b 假設d是a, b的一個公約數(shù), 則有 d|a,
        推薦度:
        導讀使用Python求解最大公約數(shù)的實現(xiàn)方法:1. 歐幾里德算法 歐幾里德算法又稱輾轉(zhuǎn)相除法, 用于計算兩個整數(shù)a, b的最大公約數(shù)。其計算原理依賴于下面的定理: 定理: gcd(a, b) = gcd(b, a mod b) 證明: a可以表示成a = kb + r, 則r = a mod b 假設d是a, b的一個公約數(shù), 則有 d|a,

        1. 歐幾里德算法

        歐幾里德算法又稱輾轉(zhuǎn)相除法, 用于計算兩個整數(shù)a, b的最大公約數(shù)。其計算原理依賴于下面的定理:
        定理: gcd(a, b) = gcd(b, a mod b)

        證明:
        a可以表示成a = kb + r, 則r = a mod b
        假設d是a, b的一個公約數(shù), 則有 d|a, d|b, 而r = a - kb, 因此d|r。
        因此,d是(b, a mod b)的公約數(shù)。
        加上d是(b,a mod b)的公約數(shù),則d|b, d|r, 但是a = kb + r,因此d也是(a, b)的公約數(shù)。
        因此,(a, b) 和(a, a mod b)的公約數(shù)是一樣的,其最大公約數(shù)也必然相等,得證。

        歐幾里德的Python語言描述為:

        def gcd(a, b):
         if a < b:
         a, b = b, a
        
         while b != 0:
         temp = a % b
         a = b
         b = temp
        
         return a
        
        

        2. Stein算法
        歐幾里德算法是計算兩個數(shù)最大公約數(shù)的傳統(tǒng)算法,無論是理論,還是從效率上都是很好的。但是他有一個致命的缺陷,這個缺陷只有在很大的素數(shù)時才會顯現(xiàn)出來。
        考慮現(xiàn)在的硬件平臺,一般整數(shù)最多也就是64位, 對于這樣的整數(shù),計算兩個數(shù)值就的模很簡單的。對于字長為32位的平臺,計算兩個不超過32位的整數(shù)的模,只需要一個指令周期,而計算64位以下的整數(shù)模,也不過幾個周期而已。但是對于更大的素數(shù),這樣的計算過程就不得不由用戶來設計,為了計算兩個超過64位的整數(shù)的模,用戶也許不得不采用類似于多位除法手算過程中的試商法,這個過程不但復雜,而且消耗了很多CPU時間。對于現(xiàn)代密碼算法,要求計算128位以上的素數(shù)的情況比比皆是,設計這樣的程序迫切希望能夠拋棄除法和取模。
        Stein算法由J.Stein 1961年提出,這個方法也是計算兩個數(shù)的最大公約數(shù)。和歐幾里德算法不同的是,Stein算法只有整數(shù)的移位和加減法,這對于程序設計者是一個福音。
        為了說明Stein算法的正確性,首先必須注意到以下結論:
        gcd(a, a) = a, 也就是一個數(shù)和他自己的公約數(shù)是其自身。
        gcd(ka, kb) = k * gcd(a, b),也就是最大公約數(shù)運算和倍乘運算可以交換,特殊的,當k=2時,說明兩個偶數(shù)的最大公約數(shù)比如能被2整除。
        Stein算法的python實現(xiàn)如下:

        def gcd_Stein(a, b): 
         if a < b:
         a, b = b, a
         if (0 == b):
         return a
         if a % 2 == 0 and b % 2 == 0:
         return 2 * gcd_Stein(a/2, b/2)
         if a % 2 == 0:
         return gcd_Stein(a / 2, b)
         if b % 2 == 0:
         return gcd_Stein(a, b / 2)
         
         return gcd_Stein((a + b) / 2, (a - b) / 2) 
        

        3. 一般求解實現(xiàn)

        核心代碼很簡單:

        def gcd(a, b):
        if b == 0:return a
        return gcd(b, a % b)
        
        

        附上一個用Python實現(xiàn)求最大公約數(shù)同時判斷是否是素數(shù)的一般方法:
        程序如下:

        #!/usr/bin/env python 
         
        def showMaxFactor(num): 
         count = num / 2 
         while count > 1: 
         if num % count == 0: 
         print 'largest factor of %d is %d' % (num, count) 
         break #break跳出時會跳出下面的else語句 
         count -= 1 
         else: 
         print num, "is prime" 
         
        for eachNum in range(10,21): 
         showMaxFactor(eachNum) 
        
        

        輸出如下:

        largest factor of 10 is 5
        11 is prime
        largest factor of 12 is 6
        13 is prime
        largest factor of 14 is 7
        largest factor of 15 is 5
        largest factor of 16 is 8
        17 is prime
        largest factor of 18 is 9
        19 is prime
        largest factor of 20 is 10
        

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        使用Python求解最大公約數(shù)的實現(xiàn)方法

        使用Python求解最大公約數(shù)的實現(xiàn)方法:1. 歐幾里德算法 歐幾里德算法又稱輾轉(zhuǎn)相除法, 用于計算兩個整數(shù)a, b的最大公約數(shù)。其計算原理依賴于下面的定理: 定理: gcd(a, b) = gcd(b, a mod b) 證明: a可以表示成a = kb + r, 則r = a mod b 假設d是a, b的一個公約數(shù), 則有 d|a,
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲成色www久久网站夜月| 日韩精品成人亚洲专区| 亚洲最大黄色网址| 毛片在线全部免费观看| 亚洲色精品vr一区二区三区| 久久er国产精品免费观看8| 亚洲AV无码一区二三区| 国产免费播放一区二区| 国产亚洲av人片在线观看| 深夜免费在线视频| 久久亚洲中文字幕精品一区| 国产黄片不卡免费| 国产AV无码专区亚洲AV男同| 成人免费区一区二区三区| 亚洲av无码国产精品色午夜字幕| 91短视频免费在线观看| 亚洲xxxx视频| 一本色道久久88亚洲综合| 和老外3p爽粗大免费视频| 91亚洲国产成人精品下载| 日韩免费一区二区三区在线播放| 亚洲中文字幕乱码AV波多JI| 可以免费观看一级毛片黄a| 精品人妻系列无码人妻免费视频| 亚洲国产精品SSS在线观看AV | 国产成人综合久久精品亚洲| www亚洲精品少妇裸乳一区二区| 91免费国产视频| 亚洲免费中文字幕| 免费看一级做a爰片久久| 国产三级在线免费观看| 亚洲午夜精品在线| 亚洲?V无码成人精品区日韩| 无码一区二区三区免费| 亚洲色偷偷色噜噜狠狠99网| 亚洲乱亚洲乱少妇无码| 国产成人精品免费午夜app| 免费大片av手机看片| 亚洲精品免费在线| 免费国产高清视频| 91精品国产免费久久国语蜜臀|