대수학에서, 조립 제법(synthetic division)은, 다항식의 긴 나눗셈(polynomial long division)보다 적은 수의 계산과 적게 쓰는 것으로, 다항식의 유클리드 나눗셈(Euclidean division of polynomials)을 수행하는 방법입니다. 대부분이 다음 형태의 이항식에 의한 나눗셈을 참조됩니다:
\(\quad\)\(x - a,\ \)
그러나 이 방법은 임의의 일계수 다항식(monic polynomial), 및 임의의 다항식(polynomial)에 의한 나눗셈으로 일반화됩니다.
조립 제법의 장점은 변수를 쓰지 않고도 계산할 수 있고, 적은 계산을 사용하고, 무엇보다 중요한 것은 긴 나눗셈보다 종이 공간이 훨씬 적게 든다는 것입니다. 또한, 긴 나눗셈의 뺄셈은, 부호를 처음부터 바꿈으로써, 덧셈으로 변환되기 때문에, 부호 오류를 방지합니다.
선형 분모에 대한 조립 제법은 루피니의 규칙(Ruffini's rule)을 통한 나눗셈이라고 역시 불립니다.
Regular synthetic division
첫 번째 예제는 오직 일계수(monic) 선형 분모 \((x-a)\)가 있는 조립 제법입니다.
\(\quad\)\(\displaystyle \frac{x^3 - 12x^2 - 42}{x - 3}\)
상단에 나누어지는 다항식의 계수를 씁니다 (영은 보이지 않는 0''x''에 대한 것입니다).
\(\quad\)\(\begin{array}{cc}
\begin{array}{r} \\ \\ \end{array}
&
\begin{array}{|rrrr} \
1 & -12 & 0 & -42 \\
& & & \\
\hline
\end{array}
\end{array}\)
나누는 식의 계수를 부정합니다(부호를 바꿉니다).
\(\quad\)\( \begin{array}{rr}
-1x & + 3
\end{array}\)
나누는 식의 모든 계수를 쓰지만, 첫 번째 계수는 남겨둡니다(버립니다).
\(\quad\)\(\begin{array}{cc}
\begin{array}{r} \\ 3 \\ \end{array}
&
\begin{array}{|rrrr} \
1 & -12 & 0 & -42 \\
& & & \\
\hline
\end{array}
\end{array}\)
주목할 것은 −3에서 3으로 부호가 바뀐다는 점입니다. 수직 막대 후의 첫 번째 계수를 다음 행으로 "내립니다".
\(\quad\)\(\begin{array}{cc}
\begin{array}{r} \\ 3 \\ \\ \end{array}
&
\begin{array}{|rrrr}
1 & -12 & 0 & -42 \\
& & & \\
\hline
1 & & & \\
\end{array}
\end{array}\)
수직 막대 전의 숫자와 내려진 숫자를 곱하고, 다음 열에 적습니다.
\(\quad\)\(\begin{array}{cc}
\begin{array}{r} \\ 3 \\ \\ \end{array}
&
\begin{array}{|rrrr}
1 & -12 & 0 & -42 \\
& 3 & & \\
\hline
1 & & & \\
\end{array}
\end{array}\)
다음 열에서 덧셈을 수행합니다.
\(\quad\)\(\begin{array}{cc}
\begin{array}{c} \\ 3 \\ \\ \end{array}
&
\begin{array}{|rrrr}
1 & -12 & 0 & -42 \\
& 3 & & \\
\hline
1 & -9 & & \\
\end{array}
\end{array}\)
앞의 두 단계를 반복해서 다음을 얻을 수 있습니다:
\(\quad\)\(\begin{array}{cc}
\begin{array}{c} \\ 3 \\ \\ \end{array}
&
\begin{array}{|rrrr}
1 & -12 & 0 & -42 \\
& 3 & -27 & -81 \\
\hline
1 & -9 & -27 & -123
\end{array}
\end{array}\)
수직 막대의 왼쪽에 항을 셉니다. 이 예제에서는 오직 하나이기 때문에, 나머지는 차수 0을 가집니다. 수직 막대로, 결과와 나머지를, 분리해서 표시하십시오.
\(\quad\)\( \begin{array}{rrr|r}
1 & -9 & -27 & -123
\end{array}\)
항은, 나머지와 결과 둘 모두에 대해, 오른쪽에서 차수가 0에서 시작하여 왼쪽으로 차수가 증가하면서 작성됩니다.
\(\quad\)\( \begin{array}{rrr|r}
1x^2 & -9x & -27 & -123
\end{array}\)
나눗셈의 결과는 다음과 같습니다:
\(\quad\)\(\displaystyle \frac{x^3 - 12x^2 - 42}{x - 3} = x^2 - 9x - 27 - \frac{123}{x - 3}\)
Evaluating polynomials by the remainder theorem
조립제법의 위 형태는 일변수(univariate) 다항식을 평가하기 위한 다항식 나머지 정리(polynomial remainder theorem)의 문맥에서 유용합니다. 요약하자면, \(a\)에서 \(p(x)\)의 값은 \(p(x)(x-a)\)의 나머지와 서로 같습니다. 이런 방법으로 값을 계산할 때의 장점은 전문적 지식이 없는 평가의 절반 정도의 곱셈 단계가 필요하다는 것입니다. 대안적인 평가 전략은 호너의 방법(Horner's method)입니다.
Expanded synthetic division
이 방법은 단지 약간의 수정과 함께 임의의 일계수 다항식(monic polynomial)으로 나눗셈을 일반화합니다: 변경 사항은 굵은 글씨체로 표시합니다. 이전과 동일한 단계를 사용하여, 다음의 나눗셈을 수행하십시오:
\(\quad\)\(\displaystyle \frac{x^3 - 12x^2 - 42}{x^2 + x - 3}\)
우리는 계수에만 관심이 있습니다. 상단에 나누어지는 다항식의 계수를 씁니다 (영은 보이지 않는 0''x''에 대한 것입니다).
\(\quad\)\( \begin{array}{|rrrr}
\ 1 & -12 & 0 & -42
\end{array}\)
나누는 식의 계수를 부정합니다(부호를 바꿉니다).
\(\quad\)\( \begin{array}{rrr}
-1x^2 &-1x &+3
\end{array}\)
나누는 식의 모든 계수를 쓰지만, 첫 번째 계수는 남겨두고 (버리고), 남은 숫자는 왼쪽 아래에서 오른쪽 위 방향으로 대각선에 적습니다 (다음 다이어그램을 보십시오).
\(\quad\)\(\begin{array}{cc}
\begin{array}{rr} \\ &3 \\ -1& \\ \end{array}
&
\begin{array}{|rrrr} \
1 & -12 & 0 & -42 \\
& & & \\
& & & \\
\hline
\end{array}
\end{array}\)
주목할 것은 1에서 −1 그리고 −3에서 3으로 부호가 바뀐다는 점입니다. 수직 막대 후의 첫 번째 계수를 다음 행으로 "내립니다".
\(\quad\)\(\begin{array}{cc}
\begin{array}{rr} \\ &3 \\ -1& \\ \\ \end{array}
&
\begin{array}{|rrrr}
1 & -12 & 0 & -42 \\
& & & \\
& & & \\
\hline
1 & & & \\
\end{array}
\end{array}\)
수직 막대 전의 대각선 숫자와 내려진 숫자를 곱하고, 내려진 항으로부터 오른쪽에 대각적으로 결과 항을 열에 적습니다.
\(\quad\)\(\begin{array}{cc}
\begin{array}{rr} \\ &3 \\ -1& \\ \\ \end{array}
&
\begin{array}{|rrrr}
1 & -12 & 0 & -42 \\
& & 3 & \\
& -1 & & \\
\hline
1 & & & \\
\end{array}
\end{array}\)
다음 열에서 덧셈을 수행합니다.
\(\quad\)\(\begin{array}{cc}
\begin{array}{rr} \\ &3 \\ -1& \\ \\ \end{array}
&
\begin{array}{|rrrr}
1 & -12 & 0 & -42 \\
& & 3 & \\
& -1 & & \\
\hline
1 & -13 & & \\
\end{array}
\end{array}\)
앞의 두 단계를, 곱해진 대각선으로 맨 위에 있는 끝 항을 만날 때까지, 반복해서 다음을 얻을 수 있습니다:
\(\quad\)\(\begin{array}{cc}
\begin{array}{rr} \\ &3 \\ -1& \\ \\ \end{array}
&
\begin{array}{|rrrr}
1 & -12 & 0 & -42 \\
& & 3 & -39 \\
& -1 & 13 & \\
\hline
1 & -13 & 16 & \\
\end{array}
\end{array}\)
그런 다음 모든 나머지 열을 더하십시오.
\(\quad\)\(\begin{array}{cc}
\begin{array}{rr} \\ &3 \\ -1& \\ \\ \end{array}
&
\begin{array}{|rrrr}
1 & -12 & 0 & -42 \\
& & 3 & -39 \\
& -1 & 13 & \\
\hline
1 & -13 & 16 & -81 \\
\end{array}
\end{array}\)
수직 막대의 왼쪽에 항을 셉니다. 이 예제에서는 둘이기 때문에, 나머지는 차수 일(1)을 가집니다. 수직 막대로, 결과와 나머지를, 분리해서 표시하십시오.
\(\quad\)\( \begin{array}{rr|rr}
1 & -13 & 16 & -81
\end{array}\)
항은, 나머지와 결과 둘 모두에 대해, 오른쪽에서 차수가 0에서 시작하여 왼쪽으로 차수가 증가하면서 작성됩니다.
\(\quad\)\( \begin{array}{rr|rr}
1x & -13 & 16x & -81
\end{array}\)
나눗셈의 결과는 다음과 같습니다:
\(\quad\)\(\displaystyle \frac{x^3 - 12x^2 - 42}{x^2 + x - 3} = x - 13 + \frac{16x - 81}{x^2 + x - 3}\)
For non-monic divisors
조금 더 변경해서, 확장된 기법은, 일계수 다항식이 아닌, 임의의 다항식에 대해 작동하도록 더욱 일반화될 수 있습니다. 보통 이렇게 하는 방법은 나누는 식 \(g(x)\)를 선행 계수로 나누는 것입니다 (\(a\)라고 놓습니다):
\(\quad\)\(\displaystyle h(x) = \frac{g(x)}{a}\)
그런 다음 나누는 식으로 \(h(x)\)를 사용하여 조립제법을 수행하고, 원래 나눗셈의 몫을 얻기 위해서 \(a\)로 조립제법의 몫을 나눕니다 (나머지는 같기 때문에 그대로 둡니다). 그러나 이것은 나중에 제거될 보기 흉한 분수를 종종 생성하고, 그것으로 인해 오류가 더 발생하기 쉽습니다. 먼저 \(g(x)\)의 계수를 줄이지 않고도 조립제법을 하는 것이 가능합니다.
이러한 비-일계수 나누는 식(non-monic divisor)으로 긴 나눗셈을 먼저 수행해 봄으로써 관찰할 수 있는 바와 같이, \(f(x)\)의 계수는 "내려진" 후, 곱하기 전에, \(g(x)\)의 선행 계수에 의해 나누어집니다.
다음 나눗셈을 수행하면서, 설명해 보겠습니다:
\(\quad\)\(\displaystyle \frac{6x^3+5x^2-7}{3x^2-2x-1}\)
약간 수정된 테이블이 사용됩니다:
\(\quad\)\(\begin{array}{cc}
\begin{array}{rrr} \\ &1& \\ 2&& \\ \\&&/3 \\ \end{array}
\begin{array}{|rrrr}
6 & 5 & 0 & -7 \\
& & & \\
& & & \\
\hline
& & & \\
& & & \\
\end{array}
\end{array}\)
제일 아래의 여분의 새로운 행에 주목하십시오. 이것은 "내려진" 값을 \(g(x)\)의 선행 계수로 나눈 값을 쓰는 것에 사용됩니다 (이 경우, ''/3''으로 표시되며; 주목할 것은 \(g(x)\)의 계수의 나머지들과는 다르게, 숫자의 부호는 변경되지 않는다는 점입니다).
다음으로, \(f(x)\)의 첫 계수를 보통과 같게 내립니다:
\(\quad\)\(\begin{array}{cc}
\begin{array}{rrr} \\ &1& \\ 2&& \\ \\&&/3 \\ \end{array}
\begin{array}{|rrrr}
6 & 5 & 0 & -7 \\
& & & \\
& & & \\
\hline
6 & & & \\
& & & \\
\end{array}
\end{array}\)
그런 다음 내려진 값이 3에 의해 나누어지고, 그 값을 아래 행에 적습니다:
\(\quad\)\(\begin{array}{cc}
\begin{array}{rrr} \\ &1& \\ 2&& \\ \\&&/3 \\ \end{array}
\begin{array}{|rrrr}
6 & 5 & 0 & -7 \\
& & & \\
& & & \\
\hline
6 & & & \\
2 & & & \\
\end{array}
\end{array}\)
다음으로, 확장된 기법에서와 같이, 새로운 (나누어진) 값은 2와 1과 곱해져서 맨 위의 행을 채우는 것에 사용됩니다:
\(\quad\)\(\begin{array}{cc}
\begin{array}{rrr} \\ &1& \\ 2&& \\ \\&&/3 \\ \end{array}
\begin{array}{|rrrr}
6 & 5 & 0 & -7 \\
& & 2 & \\
& 4 & & \\
\hline
6 & & & \\
2 & & & \\
\end{array}
\end{array}\)
다음 5가 내려질 때, 아래의 4와 반드시 더해지고, 결과는 다시 새로운 값으로 나눕니다:
\(\quad\)\(\begin{array}{cc}
\begin{array}{rrr} \\ &1& \\ 2&& \\ \\&&/3 \\ \end{array}
\begin{array}{|rrrr}
6 & 5 & 0 & -7 \\
& & 2 & \\
& 4 & & \\
\hline
6 & 9 & & \\
2 & 3 & & \\
\end{array}
\end{array}\)
그런 다음 3이 위의 행을 채우는 것에 사용됩니다:
\(\quad\)\(\begin{array}{cc}
\begin{array}{rrr} \\ &1& \\ 2&& \\ \\&&/3 \\ \end{array}
\begin{array}{|rrrr}
6 & 5 & 0 & -7 \\
& & 2 & 3 \\
& 4 & 6 & \\
\hline
6 & 9 & & \\
2 & 3 & & \\
\end{array}
\end{array}\)
이 시점에서, 만약, 세 번째 합계를 얻은 후에, 맨 위 행을 채우기 위해서 이 값을 사용하려고 하면, 오른쪽에서 행의 짝이 맞지 않으므로, 따라서 세 번째 합계가, 정규적인 조립제법에서 처럼, 나머지의 첫 번째 계수가 됩니다. 그러나 나머지의 값은 나누는 식의 선행 계수로 나누면 안 됩니다:
\(\quad\)\(\begin{array}{cc}
\begin{array}{rrr} \\ &1& \\ 2&& \\ \\&&/3 \\ \end{array}
\begin{array}{|rrrr}
6 & 5 & 0 & -7 \\
& & 2 & 3 \\
& 4 & 6 & \\
\hline
6 & 9 & 8 & -4 \\
2 & 3 & & \\
\end{array}
\end{array}\)
이제 우리는 답의 계수를 읽을 수 있습니다. 확장된 조립제법에서와 같이, 마지막 두 값 (나누는 식이 2차이므로)은 나머지의 계수이고, 남은 숫자(들)는 몫의 계수입니다:
\(\quad\)\( \begin{array}{rr|rr}
2x & +3 & 8x & -4
\end{array}\)
그리고 결과는 다음과 같습니다:
\(\quad\)\(\displaystyle \frac{6x^3+5x^2-7}{3x^2-2x-1} = 2x + 3 + \frac{8x - 4}{3x^2-2x-1}\)
Compact Expanded Synthetic Division
어쨌든, 위의 대각선(diagonal) 형식은 나누는 식의 차수가 나누어지는 식의 차수의 절반을 초과할 때 공간 효율성이 떨어집니다. 올바른 열에 있는 한 임의의 행의 각 곱을 쓰기 위한 완전한 자유를 가짐을 쉽게 볼 수 있습니다. 따라서 알고리듬은, 아래의 나눗셈에서 설명한 바와 같이, 강화 전략(greedy strategy)에 의해 간략화될(compactified) 수 있습니다.
\(\quad\)\(\dfrac{ax^7+bx^6+cx^5+dx^4+ex^3+fx^2+gx+h}{ix^4-jx^3-kx^2-lx-m}=nx^3+ox^2+px+q+\dfrac{rx^3+sx^2+tx+u}{ix^4-jx^3-kx^2-lx-m}\)
\(\quad\)\(\begin{array}{cc} \begin{array}{rrrr} \\ \\ \\ \\ j &k & l & m \\ \end{array} & \begin{array}{|rrrr|rrrr} & & & & qj & & & \\ & & & pj & pk & qk & & \\ & & oj & ok & ol & pl & ql & \\ & nj & nk & nl & nm & om & pm & qm \\ a & b & c & d & e & f & g & h \\ \hline a & o_0 & p_0 & q_0 & r & s & t & u \\ n & o & p & q & & & & \\ \end{array} \end{array}\)
알고리듬을 수행하는 방법은 다음과 같습니다; 이 알고리듬은 비-일계수 나누는 식에 의해 나누어지는 단계를 포함합니다:
1. 막대에 나누어지는 식의 계수를 씁니다.
\(\quad\)\(\begin{array}{cc} \begin{array}{|rrrrrrrr} \ a & b & c & d & e & f & g & h \\ \hline \end{array} \end{array}\)
2. 나누는 식의 선행 계수를 무시하고, 각 계수를 부정하고(부호를 바꾸고) 막대의 왼쪽에 배치하십시오.
\(\quad\)\(\begin{array}{cc} \begin{array}{rrrr} j &k & l & m \\ \end{array} & \begin{array}{|rrrrrrrr}\ a & b & c & d & e & f & g & h \\ \hline \end{array} \end{array}\)
3. 막대의 왼쪽에 있는 계수의 숫자로부터, 가장 오른쪽 열에서부터 시작해서, 막대 위에 나누어지는 식의 계수의 숫자를 셉니다. 그런 다음 해당 열의 왼쪽에 수직 막대를 그리는데, 아래 행까지 포함되도록 그립니다. 이 수직 막대는 몫과 나머지 사이의 분리를 표시합니다.
\(\quad\)\(\begin{array}{cc} \begin{array}{rrrr} j &k & l & m \\ \\ \end{array} & \begin{array}{|rrrr|rrrr} a & b & c & d & e & f & g & h \\ \hline & & & & & & & \\ \end{array} \end{array}\)
4. 나누어지는 식의 첫 번째 계수(즉, 선행 계수)를 수평 막대 아래로 내립니다.
\(\quad\)\(\begin{array}{cc} \begin{array}{rrrr} j &k & l & m \\ \\ \end{array} & \begin{array}{|rrrr|rrrr} a & b & c & d & e & f & g & h \\ \hline a & & & & & & & \\ \end{array} \end{array}\)
5.
- 이전에 내려진/합계된 숫자를 나누는 식의 선행 계수로 나눈 다음 아래 행에 적습니다 (선행 계수가 1인 경우에는, 이 작업을 수행할 필요가 없습니다). 이 경우에는 \(n = \dfrac{a}{i}\).
- 이전에 내려진/합계된 숫자 (또는 나누어진 내려진/합계된 숫자)를 왼쪽에 있는 각 부정된(부호가 바뀐) 나누는 식의 계수에 (가장 왼쪽부터 시작해서) 곱합니다; 만약 내려진/합계된 숫자가 영이면 건너뜁니다. 각 곱을 후속 열의 맨 위에 적습니다.
\(\quad\)\(\begin{array}{cc} \begin{array}{rrrr} \\ j &k & l & m \\ \end{array} & \begin{array}{|rrrr|rrrr} & nj & nk & nl & nm & & & \\ a & b & c & d & e & f & g & h \\ \hline a & & & & & & & \\ n & & & & & & & \\ \end{array} \end{array}\)
6. 다음 열에 열-단위로 덧셈을 수행하십시오.
\(\quad\)\(\begin{array}{cc} \begin{array}{rrrr} \\ j &k & l & m \\ \end{array} & \begin{array}{|rrrr|rrrr} & nj & nk & nl & nm & & & \\ a & b & c & d & e & f & g & h \\ \hline a & o_0 & & & & & & \\ n & & & & & & & \\ \end{array} \end{array}\)
7. 앞의 두 단계를 반복하십시오. 수직 막대 바로 앞의 숫자에서 이전 두 단계를 수행하던 것을 멈추십시오. 여기서 \(\displaystyle o = \dfrac{o_0}{i}\).
\(\quad\)\(\begin{array}{cc} \begin{array}{rrrr} \\ \\ j &k & l & m \\ \end{array} & \begin{array}{|rrrr|rrrr} & & oj & ok & ol & & & \\ & nj & nk & nl & nm & om & & \\ a & b & c & d & e & f & g & h \\ \hline a & o_0 & p_0 & & & & & \\ n & o & & & & & & \\ \end{array} \end{array}\) 여기서 \(p = \dfrac{p_0}{i}\).
\(\quad\)\(\begin{array}{cc} \begin{array}{rrrr} \\ \\ \\ j &k & l & m \\ \end{array} & \begin{array}{|rrrr|rrrr} & & & pj & pk & & & \\ & & oj & ok & ol & pl & & \\ & nj & nk & nl & nm & om & pm & \\ a & b & c & d & e & f & g & h \\ \hline a & o_0 & p_0 & q_0 & & & & \\ n & o & p & & & & & \\ \end{array} \end{array}\) 여기서 \(q = \dfrac{q_0}{i}\).
\(\quad\)\(\begin{array}{cc} \begin{array}{rrrr} \\ \\ \\ \\ j &k & l & m \\ \end{array} & \begin{array}{|rrrr|rrrr} & & & & qj & & & \\ & & & pj & pk & qk & & \\ & & oj & ok & ol & pl & ql & \\ & nj & nk & nl & nm & om & pm & qm \\ a & b & c & d & e & f & g & h \\ \hline a & o_0 & p_0 & q_0 & r & & & \\ n & o & p & q & & & & \\ \end{array} \end{array}\)
8. 후속의 열에서 남겨진 열-방향 덧셈을 수행하십시오 (나머지를 계산하기 위한 것입니다).
\(\quad\)\(\begin{array}{cc} \begin{array}{rrrr} \\ \\ \\ \\ j &k & l & m \\ \end{array} & \begin{array}{|rrrr|rrrr} & & & & qj & & & \\ & & & pj & pk & qk & & \\ & & oj & ok & ol & pl & ql & \\ & nj & nk & nl & nm & om & pm & qm \\ a & b & c & d & e & f & g & h \\ \hline a & o_0 & p_0 & q_0 & r & s & t & u \\ n & o & p & q & & & & \\ \end{array} \end{array}\)
9. 수평 막대 아래의 맨 아래 결과는 다항식의 계수로써, 나머지 및 몫을 나타냅니다. 여기서 몫의 계수는 수직 막대로 분리된 왼쪽에 있고, 나머지는 오른쪽에 있는 계수입니다. 이러한 계수는 나머지와 몫 모두에 대해 영부터 시작하여 오른쪽에서 왼쪽으로 증가하는 차수로 해석됩니다. 이 예제는 다음과 같은 결과로 해석됩니다:
\(\quad\)\(\dfrac{ax^7+bx^6+cx^5+dx^4+ex^3+fx^2+gx+h}{ix^4-jx^3-kx^2-lx-m}=nx^3+ox^2+px+q+\dfrac{rx^3+sx^2+tx+u}{ix^4-jx^3-kx^2-lx-m}\)
Python implementation
다음 스니펫은 비-일계수 다항식에 대해 확장된 조립 제법을 구현합니다 (이것은 역시 일계수 다항식을 지원하는데, 왜냐하면 그것은 일반화이기 때문입니다):
def extended_synthetic_division(dividend, divisor):
'''Fast polynomial division by using Extended Synthetic Division. Also works with non-monic polynomials.'''
# dividend and divisor are both polynomials, which are here simply lists of coefficients. Eg: x^2 + 3x + 5 will be represented as [1, 3, 5]
out = list(dividend) # Copy the dividend
normalizer = divisor[0]
for i in xrange(len(dividend)-(len(divisor)-1)):
out[i] /= normalizer # for general polynomial division (when polynomials are non-monic),
# we need to normalize by dividing the coefficient with the divisor's first coefficient
coef = out[i]
if coef != 0: # useless to multiply if coef is 0
for j in xrange(1, len(divisor)): # in synthetic division, we always skip the first coefficient of the divisor,
# because it is only used to normalize the dividend coefficients
out[i + j] += -divisor[j] * coef
# The resulting out contains both the quotient and the remainder, the remainder being the size of the divisor (the remainder
# has necessarily the same degree as the divisor since it is what we couldn't divide from the dividend), so we compute the index
# where this separation is, and return the quotient and remainder.
separator = -(len(divisor)-1)
return out[:separator], out[separator:] # return quotient, remainder.
External links
- Goodman, Len; Stover, Christopher; and Weisstein, Eric W. "Synthetic Division". MathWorld.
- Stover, Christopher. "Ruffini's Rule". MathWorld.