Python實現多項式輾轉相除法

2021-09-25 07:04:10 字數 1796 閱讀 9597

1.輾轉相除法求兩個整數的最大公約數(log用來記錄運算過程,可刪除)

import math

def rolldivision(f1,f2,log):

if(isinstance(f1,int) and isinstance(f2,int)):

if f2>f1:

temp=f1

f1=f2

f2=temp

elif f1==f2:

return f2

else:

pass

p=math.floor(f1/f2)

r=f1-f2*p

if r!=0:

result=rolldivision(f2,r,log)

else: #r==

result=f2

return result

else:

return 'input var type error'

跳出迴圈條件是確定的,也可以不用遞迴,使用while迴圈:

def rolldivision(f1,f2,log):

if(isinstance(f1,int) and isinstance(f2,int)):

if f2>f1:

temp=f1

f1=f2

f2=temp

elif f1==f2:

return f2

else:

pass

p=math.floor(f1/f2)

r=f1-f2*p

while r!=0:

f1=f2

f2=r

p=math.floor(f1/f2)

r=f1-f2*p

return f2

else:

return 'input var type error'

2.為了將輾轉相除法應用到多項式上,先定義多項式的除法:

用list表示多項式,list[i]=i次的多項式係數;注意要pop最高位的係數0,否則下一步迭代時會產生division zero的錯誤

import copy

def popzero(f):

checkzero=len(f)

for i in range(checkzero):

if abs(f[-1])<1e-9:

f.pop()

else:

break

def polydivision(f1,f2):

popzero(f1)

popzero(f2)

degree1=len(f1)-1

degree2=len(f2)-1

if degree13.對多項式應用輾轉相除法

def polyrolldivision(f1,f2,log):

if(isinstance(f1,list) and isinstance(f2,list)):

if len(f2)>len(f1):

temp=f1

f1=f2

f2=temp

else:

pass

p,r=polydivision(f1,f2)

if len(r)>1:

result=polyrolldivision(f2,r,log)

else:

result=f2

return result

else:

return 'input var type error'

多項式輾轉相除法求最大公約數 輕鬆理解輾轉相除法

初聽到輾轉相除法的朋友,可能如同這個人一樣滿腦子問號,心中不免思索到 這是個什麼東西?而後又心中不免猜想 聽名字像是個除法,但是好拗口啊?再然後有的人用手駐在桌子上,撐著頭,喃喃自語 嘶.好像在哪聽過?到底在哪聽過呢?就這樣想著想著,漸漸的,可能有的朋友腦子裡靈光一閃 試探性的問問自己 哎.我是不是...

Python程式設計實現多項式擬合

初學機器學習,看到書中講線性擬合,便試著用python程式設計實現。所要擬合的函式為 f x sin x x 0 20 f x sin x x 0 20 其中,服從均差為0.3的高斯分布。實現 如下 import numpy as np import matplotlib.pyplot as plt...

多項式的實現

在實現上述鍊錶之後,我們自己動手完成乙個習題,就是利用鍊錶實現多項式的相加,這個就比較簡單,這裡可要自己動手寫,我也是完全自己寫的。include using namespace std typedef struct lnode lnode,linklist void initexpn linkli...