ネタがないので、因数分解振り返り。
最初はバグかと思ったのだが、mod の世界の多項式は、定数項のみでなくても微分すると
になることがある。
これは Cantor-Zassenhaus の論文に書いてあった。論文に書くほどのことではない気がするが、親切にもそう書いてあったので、気がついた。
mod
なら次数が
の倍数の項は微分すると係数に
の倍数が出てきてゼロになるのである。そこから多項式が微分して
なら、次数が
の倍数の項しかないということで、これはある多項式の
乗になっているということである。これもCantor-Zassenhaus の論文に書いてあった。
となる。これで微分してでもmod
の世界で無平方分解が出来る。同時にわかることは、プログラムで計算する時に、
乗する際は実際に
回掛けるのではなく、係数ベクトルを
個おきになるように変えればよい。
さらに、ここから以前から悩んでいたjavascriptで扱うにはやや指数が大きくなる問題も解決できた。ので一応書いておく。
Cantor-Zassenhaus 法では、
を素数、
を因数分解する多項式の次数とすると、mod
の世界でランダムな多項式
を
乗する必要があり、この
乗で悩んでいたのである。
乗の計算は簡単だが、これは
乗ではない。そこで
乗に直すことにした。
は奇素数なので
とおく。
なのでについての次の漸化式が成り立つ。
あとはプログラムでループすればよい。乗はしなければならないが、
の半分だから気にしない。
今回の記事は、ari23さんのブログ記事を参考にしました。