判定整系数多项式在有理数域上的可约性(克罗内克尔判别法)
首先声明,此代码并不完善,无法正确判断常数项为0的非零整系数多项式在有理数域上的可约性,实际上,常数项为0的非零整系数多项式显然是可约的,因此我并没有再加以修改(懒癌犯了),如果是完美主义者,只需再加个条件判断语句即可。
import numpy as np
from scipy.linalg import solve
var = locals()
z=np.poly1d([1])/np.poly1d([1])
req=z[1]n1=int(input('请输入f(x)的次数:'))
coes=[]
for i in range(n1+1):coe=int(input('请输入f(x){}次项系数:'.format(n1-i)))coes.append(coe)
f=np.poly1d(coes)n2=int(n1/2)def value(n): a={1,-1}for i in range(2,n+1):if n % i ==0:a.add(i)a.add(-i)return list(a)for i in range(n2 + 1):n3=f(i)var['g'+str(i)+'s']=value(n3)listc=[]
for i in range(n2+1):listc.append(var['g'+str(i)+'s'])def zheway(l1,l2):c=[]for a in l1:for b in l2:d=a+[b]c.append(d)return c
i=0
l=[[]]
while i<(n2+1):l=zheway(l,listc[i])i+=1for i in l: lista=[]for y in range(n2+1):var['list'+str(y)]=[]for z in range(n2+1):var['list'+str(y)].append(y**(n2-z))lista.append(var['list'+str(y)])listb=[]for x in i:listb.append(x)a = np.array(lista)b = np.array(listb)re = solve(a, b)res=list(re)g=np.poly1d(res)if len(g.c)==1:passelse:r=f/gif r[1]==req:print('该多项式可约。')breakelse:print('该多项式不可约。')input('按回车键退出。')
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
