Go to the first, previous, next, last section, table of contents.

### `sdiv`, `sdivm`, `srem`, `sremm`, `sqr`, `sqrm`

`sdiv(poly1,poly2[,v])`
`sdivm(poly1,poly2,mod[,v])`
  :: poly1 を poly2 で割る除算が最後まで実行できる場合に商を求める.
`srem(poly1,poly2[,v])`
`sremm(poly1,poly2,mod[,v])`
  :: poly1 を poly2 で割る除算が最後まで実行できる場合に剰余を求める.
`sqr(poly1,poly2[,v])`
`sqrm(poly1,poly2,mod[,v])`
  :: poly1 を poly2 で割る除算が最後まで実行できる場合に商, 剰余を 求める.

return
  `sdiv()`, `sdivm()`, `srem()`, `sremm()` : 多項式, `sqr()`, `sqrm()` : `[商,剰余]` なるリスト
poly1 poly2
  多項式
v
  不定元
mod
  素数

- poly1 を poly2 の主変数 `var`(poly2) ( 引数 v がある場合には v) に関する多項式と見て, poly2 で, 割り算を行う.
- `sdivm()`, `sremm()`, `sqrm()` は GF(mod) 上で計算する.
- 多項式の除算は, 主係数どうしの割算により得られた商と, 主変数の適当な冪の 積を poly2 に掛けて, poly1 から引くという操作を poly1 の次数が poly2 の次数より小さくなるまで繰り返して 行う. この操作が, 多項式の範囲内で行われるためには, 各ステップにおいて 主係数どうしの除算が, 多項式としての整除である必要がある. これが, 「除算 が最後まで実行できる」ことの意味である.
- 典型的な場合として, poly2 の主係数が, 有理数である場合, あるいは, poly2 が poly1 の因子であることがわかっている場合など がある.
- `sqr()` は商と剰余を同時に求めたい時に用いる.
- 整数除算の商, 剰余は `idiv`, `irem` を用いる.
- 係数に対する剰余演算は `%` を用いる.

    [0] sdiv((x+y+z)^3,x^2+y+a);
    x+3*y+3*z
    [1] srem((x+y+z)^2,x^2+y+a);
    (2*y+2*z)*x+y^2+(2*z-1)*y+z^2-a
    [2] X=(x+y+z)*(x-y-z)^2;
    x^3+(-y-z)*x^2+(-y^2-2*z*y-z^2)*x+y^3+3*z*y^2+3*z^2*y+z^3
    [3] Y=(x+y+z)^2*(x-y-z);
    x^3+(y+z)*x^2+(-y^2-2*z*y-z^2)*x-y^3-3*z*y^2-3*z^2*y-z^3
    [4] G=gcd(X,Y);
    x^2-y^2-2*z*y-z^2
    [5] sqr(X,G);
    [x-y-z,0]
    [6] sqr(Y,G);
    [x+y+z,0]
    [7] sdiv(y*x^3+x+1,y*x+1);
    divsp: cannot happen
    return to toplevel

`参照`
  section `idiv`, `irem`, section `%`.

Go to the first, previous, next, last section, table of contents.