読み書きプログラミング

日常のプログラミングで気づいたことを綴っています

(10) 円周等分多項式

円周等分多項式は、複素数解のうち、n乗すると初めて1になる解を根に持つ既約多項式です。正確な定義は以下の式になります。

円周等分多項式Maximaでいくつか書き出してみましょう。

/* 4.1.24m */
cyclotomic(k, z) := trigrat(product(if gcd(j, k) = 1 then z - exp(2*%pi *%i*j/k) else 1, j, 1, k))$
for j : 1 thru 10 do print("C", j, " = ",cyclotomic(j, z))$

使用した機能


円周等分多項式は、以下のようにも表されます。

自然数kを割り切る自然数dという意味です。
メビウス函数です。


こちらを使って、もう一度書き出してみましょう。

cyclotomic2(k, z) := ratsimp(
   product(if mod(k, d) = 0 then (z^(k/d)-1)^moebius(d) else 1, d, 1, k))$
for j : 1 thru 10 do print("C", j, " = ",cyclotomic2(j, z))$

使用した機能

同じ結果が得られました。


円周等分多項式の係数の絶対値はすべて1に見えますが、この推測は間違いです。k=105を見ておきましょう。

/* 4.1.25m */
cyclotomic2(105, z)$

41次の係数に-2が現れました。