Удаление циклотомических факторов из полинома - Пари - PullRequest
0 голосов
/ 13 июня 2019

Я хочу взять некоторый многочлен 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 Ответ

1 голос
/ 13 июня 2019

Следующие два предложения основаны на повторении делений до тех пор, пока больше не будет сделано (они оба очень похожи).

Предложение 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)])}
...