问题
给定一个整数系数的多项式,我们要得到所有的有理数解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 i<len(L1):
R.append(L1[i]+L2[i])
i+=1
R=R+L2[len(L1):len(L2)]
return R
def subtract_poly(L1,L2):#多项式减法
R=[]
L2=L2[:]#为了不改变原来的L2
for i in range(len(L2)):
L2[i]=-L2[i]
R=add_poly(L1,L2)
return R
def multiply_poly(L1,L2):#多项式乘法
if len(L1)>len(L2):
L1