給定乙個整數係數的多項式,我們要得到所有的有理數解x,使得x代入多項式為0。有理數解就是能用分數表示的解。
如果有理數解為p/q,則多項式可分解成若干個(x-p/q)相乘的形式,其中p是多項式常數項係數的因數,q是多項式最高次項係數的因數。這樣分解之後x=p/q就是我們需要求的有理數解,所以只需要嘗試所有p、q的組合,判斷p/q是否滿足多項式為0,即可。需要注意的是,(1)要考慮負根(2)不能去掉重根,應該把所有的重根都列出來。
**如下:
#方程式求有理數根
import math
import fractions
def add_poly(l1,l2):#多項式加法
r=if len(l1)>len(l2):
l1,l2=l2,l1
i=0while ilen(l2):
l1,l2=l2,l1
zero=;r=
for i in l1:
t=zero[:]
for j in l2:
r=add_poly(r,t)
zero=zero+[0]
return r
def divide_poly(l1,l2):#多項式除法
if len(l1)0:
str1="(x-"+str(x)
else :str1="(x+"+str(abs(x))
str1=str1+")"
print(str1,end="")
print("\n")
while true:
s=input("請輸入乙個方程式的係數(低次項係數在前,以空格分隔)")
l1=s.split(" ")
l=[int(e) for e in l1]
print("l:",l)
s=rational(l)
if len(s)==0:
print("no solution!\n")
else:
print("方程分解成有理數根的形式是:",end="")
to_string(s)
有理數均值
本題要求編寫程式,計算n個有理數的平均值。輸入第一行給出正整數n 100 第二行中按照a1 b1 a2 b2 的格式給出n個分數形式的有理數,其中分子和分母全是整形範圍內的整數 如果是負數,則負號一定出現在最前面。在一行中按照a b的格式輸出n個有理數的平均值。注意必須是該有理數的最簡分數形式,若分...
有理數比較大小及有理數相加
本題要求編寫程式,比較兩個有理數的大小,並且計算兩個有理數的和。輸入格式 在一行中按照a1 b1 a2 b2的格式給出兩個分數形式的有理數,其中分子和分母全是整形範圍內的正整數。輸出格式 在一行中按照a1 b1 a2 b2的格式輸出兩個有理數比較大小 在一行中按照a b的格式輸出兩個有理數的和。注意...
5 33 有理數加法
本題要求編寫程式,計算兩個有理數的和。輸入格式 輸入在一行中按照a1 b1 a2 b2的格式給出兩個分數形式的有理數,其中分子和分母全是整形範圍內的正整數。輸出格式 在一行中按照a b的格式輸出兩個有理數的和。注意必須是該有理數的最簡分數形式,若分母為1,則只輸出分子。輸入樣例1 1 3 1 6 輸...