<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
        主站蜘蛛池模板: 亚洲国产综合久久天堂| 在线亚洲97se亚洲综合在线 | 亚洲成年人免费网站| 亚洲国产精品乱码在线观看97| 狠狠久久永久免费观看| 999zyz**站免费毛片| 亚洲国产午夜中文字幕精品黄网站| 国产免费无码AV片在线观看不卡| 亚洲一区二区三区在线| 野花高清在线观看免费3中文 | 亚洲成年人电影网站| 免费永久看黄在线观看app| 亚洲综合在线一区二区三区| 亚洲精品视频免费| 亚洲高清中文字幕免费| 中文字幕在线日亚洲9| 亚洲精品乱码久久久久66| 67pao强力打造高清免费| 免费国产a理论片| 免费永久国产在线视频| 中文字幕亚洲免费无线观看日本 | 又粗又长又爽又长黄免费视频| 亚洲熟妇无码久久精品| 国产亚洲精品AA片在线观看不加载 | 亚洲一区免费在线观看| 亚洲专区一路线二| 精品亚洲成α人无码成α在线观看| 7723日本高清完整版免费| 亚洲6080yy久久无码产自国产 | 亚洲免费福利视频| 亚洲性猛交XXXX| 国产a级特黄的片子视频免费| 国产在线观看麻豆91精品免费| 免费久久人人爽人人爽av| 无码天堂亚洲国产AV| 国产91在线|亚洲| 亚洲AV无码成人精品区大在线| 国产va免费精品观看精品| 一级成人a毛片免费播放| 久久国产福利免费| 无忧传媒视频免费观看入口|