求最大公約數(shù)

基本概念

  • 因數(shù) :若A=m×n扑浸,則稱m,n是A的因數(shù)燕偶;A是m喝噪,n的倍數(shù) 一個(gè)數(shù)的最大因數(shù)和最小倍數(shù)都是它本身
    一個(gè)數(shù)的最小因數(shù)是1。
  • 質(zhì)數(shù)(素?cái)?shù)):在大于1的整數(shù)中指么,只有1和它本身兩個(gè)因數(shù)的數(shù)酝惧,叫做質(zhì)數(shù)。** 0伯诬、1既不是質(zhì)數(shù)也不是合數(shù)晚唇;2 是唯一的偶數(shù)質(zhì)數(shù)**。
  • 約數(shù):若A÷B=x?0(A能夠整除B盗似,沒(méi)有余數(shù))哩陕; 則稱B是A的約數(shù);A是B的倍數(shù)
  • 質(zhì)約數(shù):如果一個(gè)整數(shù)的約數(shù)恰好是一個(gè)質(zhì)數(shù)赫舒,則稱此約數(shù)為這個(gè)整數(shù)的質(zhì)約數(shù)
  • 分解質(zhì)因數(shù)(分解質(zhì)約數(shù)):把一個(gè)整數(shù)分解成多個(gè)質(zhì)因數(shù)(約數(shù))連乘 標(biāo)準(zhǔn)分解質(zhì)因數(shù)的寫法:把小的寫在前面悍及,多個(gè)相同的質(zhì)數(shù)要用乘方表示。

宣傳語(yǔ)

歷經(jīng)兩個(gè)半月的準(zhǔn)備接癌,三次大改版心赶,十七次小改版。le1024終于要和大家見(jiàn)面了缺猛。

le1024每天推薦1~3段缨叫,有趣、有愛(ài)枯夜、有故事的視頻弯汰。

為您工作、學(xué)習(xí)湖雹、生活之余增加一點(diǎn)快樂(lè)的感覺(jué)咏闪。

  • 互質(zhì), 也稱之為互素。若N個(gè)整數(shù)的最大公因子是1摔吏,則稱這N個(gè)整數(shù)互質(zhì)鸽嫂。
  • 合數(shù):在大于2的整數(shù)中,除了1和它本身兩個(gè)因數(shù)征讲,還有其它因數(shù)的數(shù)据某,叫做合數(shù)
    整數(shù)a除以整數(shù)b(b≠0) 除得的商正好是整數(shù)而沒(méi)有余數(shù),我們就說(shuō)a能被b整除诗箍,或b能整除a癣籽。a叫b的倍數(shù),b叫a的約數(shù)(或 因數(shù))。一個(gè)數(shù)的約數(shù)是有限的筷狼。

什么是最大公約數(shù)

最大公約數(shù)瓶籽,也稱最大公因數(shù)、最大公因子埂材,指兩個(gè)或多個(gè)整數(shù)共有約數(shù)中最大的一個(gè)塑顺。
如,12 和 30 的約數(shù)俏险,以及公有的約數(shù)严拒。

那么可知,12和30的最大公約數(shù)為6

輾轉(zhuǎn)相除法

兩個(gè)整數(shù)的最大公約數(shù)是能夠同時(shí)整除它們的最大的正整數(shù)竖独。輾轉(zhuǎn)相除法基于如下原理:兩個(gè)整數(shù)的最大公約數(shù)等于其中較小的數(shù)和兩數(shù)的相除余數(shù)的最大公約數(shù) 裤唠。

例如,252和105的最大公約數(shù)是21(252 = 21 × 12预鬓;105 = 21 × 5)巧骚;因?yàn)?52 / 105 = 2余42,所以105和42的最大公約數(shù)也是21格二。在這個(gè)過(guò)程中劈彪,較大的數(shù)縮小了,所以繼續(xù)進(jìn)行同樣的計(jì)算可以不斷縮小這兩個(gè)數(shù)直至余數(shù)變?yōu)榱愣ゲ隆_@時(shí)的除數(shù)就是所求的兩個(gè)數(shù)的最大公約數(shù)沧奴。

輾轉(zhuǎn)相除法的演示動(dòng)畫(huà):兩條線段分別表示252和105,其中每一段表示21长窄。動(dòng)畫(huà)演示了循環(huán)從大數(shù)中減去小數(shù)滔吠,直到其中一段的長(zhǎng)度為0,此時(shí)剩下的一條線段的長(zhǎng)度就是252和105的最大公約數(shù)挠日。

條形表示法:

最初的綠色矩形的長(zhǎng)和寬分別是a = 1071疮绷、b = 462,從中不斷鋪上462×462的正方形直到剩下部分面積是462×147嚣潜;然后再鋪上147×147的正方形直至剩下21×147的面積冬骚;最后,鋪上21×21的正方形時(shí)懂算,綠色部分就沒(méi)有了只冻。即21是1071和462的最大公約數(shù).

瓷磚表示法:

數(shù)學(xué)表示:

f(x,y) = f(y, x % y)

ruby 代碼:

def gcd(x , y)
    return (y == 0 )? x : gcd(y , x % y)
end

用輾轉(zhuǎn)相除法求幾個(gè)數(shù)的最大公約數(shù),可以先求出其中任意兩個(gè)數(shù)的最大公約數(shù)计技,再求這個(gè)最大公約數(shù)與第三個(gè)數(shù)的最大公約數(shù)喜德,依次求下去,直到最后一個(gè)數(shù)為止垮媒。最后所得的那個(gè)最大公約數(shù)舍悯,就是所有這些數(shù)的最大公約數(shù)航棱。

時(shí)間復(fù)雜度:
O(log n),其中 n 為輸入數(shù)值的位數(shù)贱呐。

相減法

以較大的數(shù)減較小的數(shù)丧诺,接著把所得的差與較小的數(shù)比較,并以大數(shù)減小數(shù)奄薇。繼續(xù)這個(gè)操作,直到所得的減數(shù)和差相等為止抗愁。

例如:91和49

較大值 較小值
91 49
49 42
42 7
35 7
28 7
21 7
14 7
7 7

數(shù)學(xué)表示:

f(x,y) = f(x-y, y)

ruby 代碼:

def gcd2(x , y)
  if(x < y)
    return  gcd2(y , x)
  elsif(y == 0)
    return x
  else
    return gcd2(x - y , y)
  end
end

時(shí)間復(fù)雜度: < O(log n)

此解法用減法而不是除法馁蒂,降低了計(jì)算的復(fù)雜度,但是迭代的次數(shù)比除法要多蜘腌,當(dāng)遇到f(10000000,1)的情況時(shí)這不是一個(gè)好方法沫屡。

相除法和想減法的區(qū)別

(1)都是求最大公約數(shù)的方法,計(jì)算上輾轉(zhuǎn)相除法以除法為主撮珠,更相減損術(shù)以減法為主沮脖,計(jì)算次數(shù)上輾轉(zhuǎn)相除法計(jì)算次數(shù)相對(duì)較少,特別當(dāng)兩個(gè)數(shù)字大小區(qū)別較大時(shí)計(jì)算次數(shù)的區(qū)別較明顯芯急。
(2)從結(jié)果體現(xiàn)形式來(lái)看勺届,輾轉(zhuǎn)相除法體現(xiàn)結(jié)果是以相除余數(shù)為0則得到,而更相減損術(shù)則以減數(shù)與差相等而得到娶耍。

融合以上兩種方式

首先免姿,從公約數(shù)的特點(diǎn)入手

  • x和y來(lái)說(shuō),如果 x = k * x1 , 那么y = k * y1 ,那么就有f(x, y) = k * f(x1, y1)
  • 如果x = p * x1, 假設(shè)p是素?cái)?shù)榕酒,并且y % p!=0 (即y不能被p整除, 若等于0胚膊,那么y就是最大公約數(shù)),那么f(x, y) = f(p * x1, y) = f(x1, y)
  • 2是一個(gè)素?cái)?shù)想鹰,同時(shí)對(duì)于二進(jìn)制表示的大整數(shù)而言紊婉,可以很容易地除以2和乘以2的運(yùn)算轉(zhuǎn)換成移位運(yùn)算,從而避免大整數(shù)除法辑舷,由此可以利用2這個(gè)數(shù)字來(lái)進(jìn)行分析

數(shù)學(xué)的表示方法

取 p = 2  
若x, y 均為偶數(shù) f(x,y)= 2 * f(x/2,y/2) = 2 * f(x >> 1, y>>1)  
若x為偶數(shù)喻犁,y為奇數(shù) f(x,y) = f(x/2, y) = f(x >> 1, y)  
若x為奇數(shù),y為偶數(shù) f(x,y) = f(x, y/2) = f(x, y >> 1)  
若x, y均為奇數(shù)  f(x, y) = f(y, x-y)
那么在f(x,y) = f(y, x- y)之后惩妇,(x - y)是一個(gè)偶數(shù)株汉,下一步就是除以2的操作   

ruby 代碼

  def gcd3(x ,y)
    if(x < y)
      return gcd3(y, x)
    end

    if(y == 0)
      return x
    else
      if(is_even?(x))
        if (is_even?(y))
          return (gcd3(x >> 1, y >> 1) << 1)
        else
          return gcd3(x >> 1, y)
        end
      else
        if(is_even?(y))
          return gcd3(x, y >> 1)
        else
          return gcd3(y, x-y)
        end
      end
    end
  end

  def is_even?(a)
    if(a%2 == 0)
      return true
    else
      return false
    end
  end

時(shí)間復(fù)雜度

O(log2(max(x,y)))

輾轉(zhuǎn)相除法證明:

設(shè)兩數(shù)為a、b(b<a)歌殃,用gcd(a,b)表示a乔妈,b的最大公約數(shù),r=a mod b 為a除以b以后的余數(shù),k為a除以b的商住拭,即a÷b=k.......r。輾轉(zhuǎn)相除法即是要證明gcd(a,b)=gcd(b,r)谒养。

第一步:令c=gcd(a,b)股淡,則設(shè)a=mc身隐,b=nc
第二步:根據(jù)前提可知r =a-kb=mc-knc=(m-kn)c
第三步:根據(jù)第二步結(jié)果可知c也是r的因數(shù)
第四步:可以斷定m-kn與n互素【否則,可設(shè)m-kn=xd唯灵,n=yd贾铝,(d>1),則m=kn+xd=kyd+xd=(ky+x)d埠帕,則a=mc=(ky+x)dc垢揩,b=nc=ycd,故a與b最大公約數(shù)成為cd敛瓷,而非c叁巨,與前面結(jié)論矛盾】
從而可知gcd(b,r)=c,繼而gcd(a,b)=gcd(b,r)呐籽。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末锋勺,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子狡蝶,更是在濱河造成了極大的恐慌庶橱,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牢酵,死亡現(xiàn)場(chǎng)離奇詭異悬包,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)馍乙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門布近,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人丝格,你說(shuō)我怎么就攤上這事撑瞧。” “怎么了显蝌?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵预伺,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我曼尊,道長(zhǎng)酬诀,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任骆撇,我火速辦了婚禮瞒御,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘神郊。我一直安慰自己肴裙,他們只是感情好趾唱,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著蜻懦,像睡著了一般甜癞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宛乃,一...
    開(kāi)封第一講書(shū)人閱讀 49,772評(píng)論 1 290
  • 那天悠咱,我揣著相機(jī)與錄音,去河邊找鬼烤惊。 笑死乔煞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的柒室。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼逗宜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼雄右!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起纺讲,我...
    開(kāi)封第一講書(shū)人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤擂仍,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后熬甚,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體逢渔,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年乡括,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肃廓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡诲泌,死狀恐怖盲赊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情敷扫,我是刑警寧澤哀蘑,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站葵第,受9級(jí)特大地震影響绘迁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜卒密,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一缀台、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧栅受,春花似錦将硝、人聲如沸恭朗。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)痰腮。三九已至,卻和暖如春律罢,著一層夾襖步出監(jiān)牢的瞬間膀值,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工误辑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沧踏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓巾钉,卻偏偏與公主長(zhǎng)得像翘狱,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子砰苍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容