最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python如何求解兩數(shù)的最大公約數(shù)

 更新時(shí)間:2018年09月27日 09:46:11   作者:冬日新雨  
這篇文章主要為大家詳細(xì)介紹了python如何求解兩數(shù)的最大公約數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

題目:

給定兩個(gè)自然數(shù),求這兩個(gè)數(shù)的最大公約數(shù)。

分析:

單看題目的話,非常簡(jiǎn)單,我們可以循環(huán)遍歷自然數(shù),如果能夠整除兩個(gè)自然數(shù),就把這個(gè)數(shù)記下來(lái),在這些記錄中找到最大的一個(gè)。
但是這樣做有幾個(gè)缺點(diǎn):一是做除法計(jì)算量比較大,二是遍歷所有自然數(shù)完全沒(méi)有必要。另外,如果能夠循環(huán),還是不要遞歸,因?yàn)镻ython的函數(shù)遞歸最大??臻g是1000(如果我沒(méi)有記錯(cuò)的話),如果數(shù)字大一些,很容易出現(xiàn)爆棧。

所以在這里有兩種處理方法:

1、如果較大的自然數(shù)除較小的一個(gè)自然數(shù),取得余數(shù),較小的自然數(shù)和余數(shù)的最大公約數(shù)就是我們要求的值。
2、如果較大的自然數(shù)減去較小的自然數(shù),取得差值,較小的自然數(shù)和差值的最大公約數(shù)就是我們要求的值。

基于以上兩條,我們就可以在根據(jù)定義得到的算法的基礎(chǔ)上進(jìn)行改進(jìn),但是!減法操作當(dāng)然比取余要方便很多。而且在計(jì)算機(jī)里,做位運(yùn)算的速度要比加減乘除都快,所以,我寫了四個(gè)算法,具體描述在代碼的 __doc__里有注釋闡述

代碼:

def greatest_common_divisor_1(self, num1, num2):
    '''
    數(shù)值計(jì)算尋找最大公約數(shù),給定兩個(gè)整數(shù),計(jì)算其最大公約數(shù),時(shí)間復(fù)雜度為 o(min(num1,num2)),取余運(yùn)算復(fù)雜度高
    '''
    gbc = 1
    for i in xrange(2, min(num1, num2)+1):
      if num2 % i == 0 and num1 % i == 0:
        gbc = i
    return gbc

  def greatest_common_divisor_2(self, num1, num2):
    '''
    輾轉(zhuǎn)相減法,時(shí)間復(fù)雜度最差為 o(min(num1,num2)),一般情況下都比這個(gè)要好。相減運(yùn)算要比除法方便很多
    '''
    while num1 != num2:
      if num1 > num2:
        num1 = num1 - num2
      else:
        num2 = num2 - num1
    return num1

  def greatest_common_divisor_3(self, num1, num2):
    '''
    求余數(shù)法,取模運(yùn)算比較麻煩,時(shí)間復(fù)雜度低 o(log max(num1, num2))
    '''
    while num1 != num2:
      if num1 > num2:
        if num1 % num2 == 0:
          return num2
        num1 = num1 % num2
      else:
        if num2 % num1 == 0:
          return num1
        num2 = num2 % num1
    return num1

  def greatest_common_divisor(self, num1, num2):
    '''
    求兩個(gè)數(shù)的最大公約數(shù)
    綜合取余法和輾轉(zhuǎn)相減法,既能得到較好的時(shí)間復(fù)雜度,又能避免取余運(yùn)算,時(shí)間復(fù)雜度穩(wěn)定 o(log max(num1,num2))
    如果取兩個(gè)非常大的數(shù)的話,前面的方法很容易爆棧、取余困難等等,但是該方法沒(méi)有問(wèn)題
    a = 999999342353200
    b = 777774234
    print greatest_common_divisor(a, b)
    '''
    factor = 1
    if num1 < num2:
      return greatest_common_divisor_1(num2, num1)
    while num1 != num2:
      if num1 & 1 is False and num2 & 1 is False: # 均為偶數(shù)
        num1 = num1 >> 1
        num2 = num2 >> 2
        factor *= 2
      elif num1 & 1 is False and num2 & 1 is True:
        num1 = num1 >> 1
      elif num1 & 1 is True and num2 & 1 is False:
        num2 = num2 >> 1
      else:
        if num1 > num2:
          num1 = num1 - num2
        else:
          num2 = num2 - num1
    return factor*num1

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Pandas數(shù)據(jù)集的合并與連接merge()方法

    Pandas數(shù)據(jù)集的合并與連接merge()方法

    Pandas數(shù)據(jù)集的合并與連接(merge())是數(shù)據(jù)處理過(guò)程中常用的操作之一,在使用Pandas進(jìn)行數(shù)據(jù)集合并時(shí),可以使用merge()函數(shù)將兩個(gè)或多個(gè)數(shù)據(jù)集按照指定的列進(jìn)行合并,本文就來(lái)介紹一下,感興趣的可以了解一下
    2023-11-11
  • 使用python把json文件轉(zhuǎn)換為csv文件

    使用python把json文件轉(zhuǎn)換為csv文件

    這篇文章主要介紹了使用python把json文件轉(zhuǎn)換為csv文件,幫助大家更好的利用python處理數(shù)據(jù),感興趣的朋友可以了解下
    2021-03-03
  • Python爬蟲教程使用Scrapy框架爬取小說(shuō)代碼示例

    Python爬蟲教程使用Scrapy框架爬取小說(shuō)代碼示例

    相信學(xué)Python爬蟲的小伙伴聽說(shuō)過(guò)Scrapy框架,也用過(guò)Scrapy框架,今天我們邊學(xué)習(xí)Scrapy框架邊爬取整部小說(shuō),讓大家在不知不覺(jué)的學(xué)習(xí)過(guò)程中使用Scrapy框架完成整部小說(shuō)的爬取
    2021-09-09
  • 使用Python中Tkinter模塊的Treeview?組件顯示ini文件操作

    使用Python中Tkinter模塊的Treeview?組件顯示ini文件操作

    這篇文章主要介紹了使用Python中Tkinter模塊的Treeview組件顯示ini文件操作,Treeview組件位于ttk模塊,該模塊自Tk8.5開始引入,主題詳細(xì)介紹,需要的朋友可以參考一下
    2022-09-09
  • 輕松掌握python的dataclass讓你的代碼更簡(jiǎn)潔優(yōu)雅

    輕松掌握python的dataclass讓你的代碼更簡(jiǎn)潔優(yōu)雅

    本文總結(jié)了幾個(gè)我在使用Python的dataclass時(shí)常用的技巧,dataclass裝飾器可以幫助我們簡(jiǎn)化數(shù)據(jù)類的定義過(guò)程,包括設(shè)置默認(rèn)值、隱藏敏感信息、設(shè)置只讀對(duì)象以及將其轉(zhuǎn)化為元組和字典,通過(guò)使用dataclass,我們可以更高效地進(jìn)行數(shù)據(jù)分析和處理,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • 利用Python+Opencv實(shí)現(xiàn)車牌自動(dòng)識(shí)別完整代碼

    利用Python+Opencv實(shí)現(xiàn)車牌自動(dòng)識(shí)別完整代碼

    這篇文章主要介紹了如何使用Python和OpenCV進(jìn)行車牌識(shí)別,包括圖像預(yù)處理、車牌定位、分割和模板匹配等步驟,通過(guò)實(shí)戰(zhàn)項(xiàng)目,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • Pytorch?Mac?GPU?訓(xùn)練與測(cè)評(píng)實(shí)例

    Pytorch?Mac?GPU?訓(xùn)練與測(cè)評(píng)實(shí)例

    這篇文章主要為大家介紹了Pytorch?Mac?GPU?訓(xùn)練與測(cè)評(píng)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 使用wxPython實(shí)現(xiàn)逐行加載HTML內(nèi)容并實(shí)時(shí)顯示效果

    使用wxPython實(shí)現(xiàn)逐行加載HTML內(nèi)容并實(shí)時(shí)顯示效果

    這篇博客中,我們將詳細(xì)分析如何使用 wxPython 構(gòu)建一個(gè)簡(jiǎn)單的桌面應(yīng)用程序,用于逐行加載并顯示 HTML 文件的內(nèi)容,并在加載完成后通過(guò)瀏覽器組件呈現(xiàn)最終頁(yè)面,通過(guò)該應(yīng)用,我們可以體驗(yàn)到逐行加載 HTML 內(nèi)容的視覺(jué)效果,類似于模擬代碼輸入,需要的朋友可以參考下
    2024-11-11
  • Python調(diào)用C語(yǔ)言動(dòng)態(tài)庫(kù)的方法小結(jié)

    Python調(diào)用C語(yǔ)言動(dòng)態(tài)庫(kù)的方法小結(jié)

    這篇文章主要為大家詳細(xì)介紹了Python調(diào)用C語(yǔ)言動(dòng)態(tài)庫(kù)的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下
    2024-12-12
  • python讀取yaml文件后修改寫入本地實(shí)例

    python讀取yaml文件后修改寫入本地實(shí)例

    這篇文章主要介紹了python讀取yaml文件后修改寫入本地實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04

最新評(píng)論

准格尔旗| 高青县| 贵州省| 德江县| 客服| 新竹县| 柳江县| 长海县| 汉沽区| 湟源县| 休宁县| 通山县| 白水县| 五大连池市| 特克斯县| 石林| 景宁| 滕州市| 苍山县| 长顺县| 视频| 屏东市| 盘锦市| 喀什市| 元江| 阜康市| 孟津县| 泰顺县| 禹城市| 循化| 天水市| 二连浩特市| 南昌市| 漳浦县| 天柱县| 囊谦县| 青浦区| 寿宁县| 巴东县| 剑川县| 乐业县|