factor ..... 因数分解

多項式の因数分解や整数の素因数分解を実行する関数。書式

factor(n)

で用いる。引数 n は有理式や有理数でもよい。

(%i1) factor(936);

                               3  2
(%o1)                         2  3  13


(%i2) factor((x^2-y^2)/(z^2-4));

                            (y - x) (y + x)
(%o2)                     - ---------------
                            (z - 2) (z + 2)

なお、変数 factorflag を true に設定すれば(デフォルトは false)係数も素因数分解される。

(%i3) factor(4*x^2-4);

(%o3)                     4 (x - 1) (x + 1)


(%i3) factorflag: true;

(%o3)                           TRUE


(%i4) factor(4*x^2-4);

                          2
(%o4)                    2  (x - 1) (x + 1)
一時的に変数 factorflag の true/false を変更するには、

factor(式), factorflag:true;

のように実行すればよい。block 関数を用いて、

block([factorflag: ture], factor(式));

でもよい。

(%i5) block([factorflag :ture], factor(4 * x^2 - 4));

                              2   2
(%o5)                        2  (x  - 1)


(%i6) block([factorflag: false], factor(4 * x^2 - 4));

                                 2
(%o6)                        4 (x  - 1)

多変数の場合、リスト変数 dontfactor に「因数分解を実行しない変数」を代入しておくと、それらの変数のみ因数分解されなくなる(デフォルトは空 dontfactor: [])。

(%i7) factor((x^2 - 1) * (y^2 - 1));

(%o7)              (x - 1) (x + 1) (y - 1) (y + 1)


(%i8) dontfactor:[x];

(%o8)                            [x]


(%i9) factor((x^2 - 1) * (y^2 - 1));

                        2
(%o9)                 (x  - 1) (y - 1) (y + 1)
この場合も前述と同様カンマ書式や block 関数を用いれば、dontfactor を一時的に設定することが出来る。
(%i10) factor((x^2 - 4) * (y^2 - 9)), dontfactor: [x];

                        2
(%o10)                (x  - 4) (y - 3) (y + 3)


(%i11) factor((x^2 - 4) * (y^2 - 9)), dontfactor: [y];

                                        2
(%o11)                (x - 2) (x + 2) (y  - 9)


(%i12) factor((x^2 - 4) * (y^2 - 9)), dontfactor: [];

(%o12)             (x - 2) (x + 2) (y - 3) (y + 3)

関数 factor には最小分解体を指定した因数分解機能もある。例えば、多項式 X^4+1 は有理数係数の範囲では因数分解出来ないが、sqrt(-1) や sqrt(2) を添加した体上では、それぞれ (X^2 - sqrt(-1)) * (X^2 + sqrt(-1))、(X^2 - sqrt(2) * X + 1) * (X^2 + sqrt(2) * X + 1) と因数分解出来る。このような因数分解を実現する機能で、書式

factor(因数分解したい式, 最小分解体の定義多項式)

で使用する。

(%i13) factor(X^4 + 1);

                                4
(%o13)                         X  + 1


(%i14) factor(X^4 + 1, a^2 + 1);

                            2        2
(%o14)                    (X  - a) (X  + a)


(%i15) factor(X^4 + 1, b^2 - 2);

                      2              2
(%o15)              (X  - b X + 1) (X  + b X + 1)

なお、sqrt(-1) を添加した場合(すなわち複素数体)の因数分解用には関数 gfactor が用意されている。

(%i16) gfactor(x^4 + 1);

                           2         2
(%o16)                   (x  - %i) (x  + %i)