从多项式中去除分圆因子 - Pari
Removing Cyclotomic Factors from a Polynomial - Pari
我想取一些多项式 f 并删除它的所有分圆因子,然后查看生成的多项式(比如 g)。我知道 polcyclofactors
并且我尝试过的当前代码是:
c(f)=polcyclofactors(f)
p(f)=prod(i=1,#c(f),c(f)[i])
g(f)=f/p(f)
我遇到的问题是 polcyclofactors
没有考虑分圆因子的多重性。例如:
f=3*x^4 + 8*x^3 + 6*x^2 - 1
g(f)
= 3*x^3 + 5*x^2 + x - 1
但是
factor(f)
=
[ x + 1 3]
[3*x - 1 1]
有什么方法可以很好地包含 f 的多个分圆因子以除以?或者我是否必须查看因式分解 f 并尝试以这种方式去除分圆因子?
下面的两个建议是基于重复除法直到不能再做(它们都非常相似)。
建议 1:
r(f)={my(c); while(c=polcyclofactors(f); #c, f=f/vecprod(c)); f}
建议 2:
r(f)={my(g=vecprod(polcyclofactors(f))); while(poldegree(g), f=f/g; g=gcd(f,g)); f}
另一个没有循环的建议:
r(f)={my(g=vecprod(polcyclofactors(f))); numerator(f/g^(poldegree(f)))}
现在一个版本可能更优越:对于每个因素 valuation
可用于获得所需的功率。
r(f)={f/vecprod([t^valuation(f,t) | t<-polcyclofactors(f)])}
我想取一些多项式 f 并删除它的所有分圆因子,然后查看生成的多项式(比如 g)。我知道 polcyclofactors
并且我尝试过的当前代码是:
c(f)=polcyclofactors(f)
p(f)=prod(i=1,#c(f),c(f)[i])
g(f)=f/p(f)
我遇到的问题是 polcyclofactors
没有考虑分圆因子的多重性。例如:
f=3*x^4 + 8*x^3 + 6*x^2 - 1
g(f)
= 3*x^3 + 5*x^2 + x - 1
但是
factor(f)
=
[ x + 1 3]
[3*x - 1 1]
有什么方法可以很好地包含 f 的多个分圆因子以除以?或者我是否必须查看因式分解 f 并尝试以这种方式去除分圆因子?
下面的两个建议是基于重复除法直到不能再做(它们都非常相似)。
建议 1:
r(f)={my(c); while(c=polcyclofactors(f); #c, f=f/vecprod(c)); f}
建议 2:
r(f)={my(g=vecprod(polcyclofactors(f))); while(poldegree(g), f=f/g; g=gcd(f,g)); f}
另一个没有循环的建议:
r(f)={my(g=vecprod(polcyclofactors(f))); numerator(f/g^(poldegree(f)))}
现在一个版本可能更优越:对于每个因素 valuation
可用于获得所需的功率。
r(f)={f/vecprod([t^valuation(f,t) | t<-polcyclofactors(f)])}