给定一个整数系数的多项式,我们要得到所有的有理数解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=0
while ilen(L2):
L1,L2=L2,L1
zero=[];R=[]
for i in L1:
T=zero[:]
for j in L2:
T.append(i*j)
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)