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...