初聽到輾轉相除法的朋友,可能如同這個人一樣滿腦子問號,心中不免思索到」這是個什麼東西?「而後又心中不免猜想:聽名字像是個除法,但是好拗口啊?再然後有的人用手駐在桌子上,撐著頭,喃喃自語:「嘶......好像在哪聽過?到底在哪聽過呢?」就這樣想著想著,漸漸的,可能有的朋友腦子裡靈光一閃
試探性的問問自己:「哎.......我是不是在小學學過這......哎!到底是幹什麼的呢?」
咳咳咳 ,言歸正傳,相信還是有很多朋友能想起來的,我們從小學五年級開始學習公約(因)數,公倍數;而輾轉相除法是求最大公約數的乙個相當好的方法。
輾轉相除法,又名歐幾里得演算法,最早出自歐幾里得的《幾何原本》。我們最初學的是用於求兩個非負整數的最大公約數。有兩個正整數f和g,不妨設f>g,則必定會有f=qg+r(0如果r=0,則f=qg,顯然,g是f和g的最大公約數;若r不為0,將表示式變形,有r=f-qg;假設f和g的公約數為d,則設f=ad,g=bd;有r=ad-qbd=(a-qb)d,顯然,d也整除r,即f與g的公約數等於g與r的公約數,那麼f與g的最大公約數也就等於g與r的最大公約數
這樣,當最後乙個式子中
+ (
=0)則,
就是g和f的最大公約數。附圖如下(我自己畫的。。。不好見諒)
既然我們在非負整數中用了該法找出了最大公約數,那麼難道我們不能在多項式中也用此方法找到最大公約數嗎?
我們設 f(x),g(x)分別是p[x]中兩個多項式,p[x]中的多項式d[x]為f(x)和g(x)的最大公因式。........到這裡,我們可以想到什麼?✨
✔bingo,顯然,我們可以分別將上面提到的求兩個非負整數最大公約數的過程分別換成乙個多項式,.......你們想出來了嗎?
我現在給出求兩個非負整數最大公因式的例子(多項式的真的太費勁了 )
eg.求136和714最大公因式:
714=5*136+34
136=102*1+34
34=34*1+0
那麼,這兩個非負整數最大公約數是34.
哎,好累啊,寫到這。
多謝大家耐心看到這裡,作者水平有限,如有建議或意見可以多多交流。
輾轉相除法求最大公約數
之前總結過一次高德納taocp中的最大公約數求解,其實課後題中的演算法修改要求實現的是輾轉相除法求解最大公約數。這個題目我最初的理解理解錯了,自然也沒有做出標準答案。現在按照標準答案的解答寫一下相應的 實現 defmaxcommdivisor m,n while m n 0 m m n if m 0...
求最大公約數 輾轉相除法
設求a和b的最大公約數c 則可看做邊長分別為a和b的矩形,可恰好被邊長為c的正方形無縫隙填滿 方法 不斷地用長邊除以短邊取餘數,直到長邊與短邊相等,即為所求正方形 給定平面上的兩個格點p1 x1,y1 p2 x2,y2 線段p1p2上,除p1和p2以外一共有幾個點。示例 p1 3,9 p2 7,1 ...
基於輾轉相除法求最大公約數
1 p 0,q 0 無最大公約數 2 p 0,q 0 最大公約數為q 3 p 0,q 0 最大公約數為p 4 p 0,q 0 最大公約數可通過輾轉相除取餘數轉化為 2 3 這樣的情況來求解 遞迴版,非遞迴用迴圈 public class euclid public static int euclid...