x^12をx^4-1で割ったときの余り「2003 東京都立大前期【１】」をChatGPTとWolframAlphaとsympyでやってみたい。

**・ChatGPT-3.5先生の長除法ステキです。**[(長除法?をgoogle検索)](https://www.google.com/search?q=%E9%95%B7%E9%99%A4%E6%B3%95&rlz=1CAUHAM_enJP1038JP1038&oq=%E9%95%B7%E9%99%A4%E6%B3%95&aqs=chrome..69i57.1082j0j1&sourceid=chrome&ie=UTF-8)
・sympyに、div関数がありました。
・以下,私のページで、おすすめ？のゆうどうのです。
　[「整式の割り算」の勉強を始めました。xは実数? ChatGPT-3.5先生へ](https://qiita.com/mrrclb48z/items/8497adf0b2f36fd40f7a)

オリジナル　
(youtube 11:04) math karat 様より

https://youtu.be/B0u-JlIOAk8

上と同じです。大学入試数学問題集成 様＞テキスト【1】

https://mathexamtest.web.fc2.com/2003/200311262/2003112620100mj.html

# ChatGPT-3.5先生へ(できました)

入力文(一括入力です。)
```
(1)x^3 をx-1  で割ったときの余りを求めよ.
(2)x^12をx^4-1で割ったときの余りを求めよ.
(3)x^13をx^4-1で割ったときの余りを求めよ.
```
**長除法ステキです。** 省略です。お楽しみに。
```
(1) x^3 を x-1 で割るときの余りを求めるには、次のように長除法を使うことができます。
(2) ...再び長除法を使用できます。
(3) ...同様に長除法を使用して求めることができます。
```

# WolframAlphaで

#### 日本語で
(1)

https://www.wolframalpha.com/input?i=x%5E3+%E3%82%92x-1++%E3%81%A7%E5%89%B2%E3%81%A3%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AE%E4%BD%99%E3%82%8A&lang=ja

(2)

https://www.wolframalpha.com/input?i=x%5E12%E3%82%92x%5E4-1%E3%81%A7%E5%89%B2%E3%81%A3%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AE%E4%BD%99%E3%82%8A&lang=ja

(3)

https://www.wolframalpha.com/input?i=x%5E13%E3%82%92x%5E4-1%E3%81%A7%E5%89%B2%E3%81%A3%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AE%E4%BD%99%E3%82%8A&lang=ja

#### PolynomialRemainderで

https://reference.wolfram.com/language/ref/PolynomialRemainder.html

(1)

https://www.wolframalpha.com/input?i=PolynomialRemainder%5Bx%5E3%2Cx-1%2Cx%5D&lang=ja

(2)

https://www.wolframalpha.com/input?i=PolynomialRemainder%5Bx%5E12%2Cx%5E4-1%2Cx%5D&lang=ja

(3)

https://www.wolframalpha.com/input?i=PolynomialRemainder%5Bx%5E13%2Cx%5E4-1%2Cx%5D&lang=ja

# sympyのdiv関数で(1)(2)(3)
Division＜Doc
https://docs.sympy.org/latest/modules/polys/basics.html#basic-functionality
```python
from sympy import *
var('x',real=True)
def myDiv(myP,myS):
     return div(myP,myS)[1],div(myP,myS)
print("#(1)",myDiv(x**3 ,x-1   ))
print("#(2)",myDiv(x**12,x**4-1))
print("#(3)",myDiv(x**13,x**4-1))
#(1) (1, (x**3 + x**2 + x + 1, 1))
#(2) (1, (x**8 + x**4 + 1, 1))
#(3) (x, (x**9 + x**5 + x, x))
```

# sympyで(1)のみ(math karat 様の解法で)
```python
from sympy import *
var('x')
var('Q,R')
(P,S)=(x**3,x-1)
eq1=Eq(P      ,S*Q+R              ) ;print("#eq1",eq1)
eq2=Eq(eq1.lhs,eq1.rhs).subs({x:1}) ;print("#eq2",eq2)
#eq1 Eq(x**3, Q*(x - 1) + R)
#eq2 Eq(1, R1)
```
# sympyで(２)のみ(math karat 様の(解法１)で)　剰余の定理
```python
from sympy import *
var('x')
var('Q,a,b,c,d')
(P,S) =(x**12,x**4-1)
R     =a*x**3+b*x**2+c*x+d
ans   =solve(S)                                                ;print("#ans ",ans )
eq1   =Eq(P    ,S*Q+R)                                         ;print("#eq1 ",eq1 )
eq20  =Eq(eq1.lhs,eq1.rhs).subs({x:ans[0]})                    ;print("#eq20",eq20)
eq21  =Eq(eq1.lhs,eq1.rhs).subs({x:ans[1]})                    ;print("#eq21",eq21)
eq22  =Eq(eq1.lhs,eq1.rhs).subs({x:ans[2]})                    ;print("#eq22",eq22)
eq23  =Eq(eq1.lhs,eq1.rhs).subs({x:ans[3]})                    ;print("#eq23",eq23)
ans   =solve([eq20,eq21,eq22,eq23],[a,b,c,d])                  ;print("#ans ",ans )
print("#R   ",R.subs({a:ans[a],b:ans[b],c:ans[c],d:ans[d]})) 
#ans  [-1, 1, -I, I]
#eq1  Eq(x**12, Q*(x**4 - 1) + a*x**3 + b*x**2 + c*x + d)
#eq20 Eq(1, -a + b - c + d)
#eq21 Eq(1, a + b + c + d)
#eq22 Eq(1, I*a - b - I*c + d)
#eq23 Eq(1, -I*a - b + I*c + d)
#ans  {a: 0, b: 0, c: 0, d: 1}
#R    1
```
# sympyで(２)のみ(math karat 様の(解法2)で)割り算の実行
・ChatGPT-3.5先生のような
　フリーソフトがあれば、教えて下さい。
・div関数で十分ですか、私も,print文でもガンバれば？できそうな気もします。

# sympyで(２)のみ(math karat 様の(解法3)で)因数分解の活用
・math karat 様の解法と違いますけど、安易にfactor関数にしました。
factor
factor() takes a polynomial and factors it into irreducible factors over the rational numbers. 
https://docs.sympy.org/latest/tutorials/intro-tutorial/simplification.html#factor
```python
from sympy import *
var('x')
(P,S)=(x**12,x**4-1)
eq1  =Eq(P      ,factor(P-1)+1)                   ;print("#eq1 ",eq1 )
eq2  =Eq(S      ,factor(S)    )                   ;print("#eq2 ",eq2 )
eq12 =Eq(eq1.lhs,eq1.rhs).subs({eq2.rhs:eq2.lhs}) ;print("#eq12",eq12)
#eq1  Eq(x**12, (x - 1)*(x + 1)*(x**2 + 1)*(x**2 - x + 1)*(x**2 + x + 1)*(x**4 - x**2 + 1) + 1)
#eq2  Eq(x**4 - 1, (x - 1)*(x + 1)*(x**2 + 1))
#eq12 Eq(x**12, (x**4 - 1)*(x**2 - x + 1)*(x**2 + x + 1)*(x**4 - x**2 + 1) + 1)
```
# sympyで(３)のみ(math karat 様の解法で)
```python
from sympy import *
var('x')
(P,S)=(x**13,x**4-1)
eq1  =Eq(P,factor(P-x)+x)                         ;print("#eq1 ",eq1 )
eq2  =Eq(S,factor(S)    )                         ;print("#eq1 ",eq2 )
eq12 =Eq(eq1.lhs,eq1.rhs).subs({eq2.rhs:eq2.lhs}) ;print("#eq12",eq12)
#eq1  Eq(x**13, x*(x - 1)*(x + 1)*(x**2 + 1)*(x**2 - x + 1)*(x**2 + x + 1)*(x**4 - x**2 + 1) + x)
#eq1  Eq(x**4 - 1, (x - 1)*(x + 1)*(x**2 + 1))
#eq12 Eq(x**13, x*(x**4 - 1)*(x**2 - x + 1)*(x**2 + x + 1)*(x**4 - x**2 + 1) + x)
```


# sympyの実行環境
①私の環境は,pycharmです。
②よく聞くのは、Jupyterです。
③web上で、上記のソースを「SymPy Live shell」に、コピー貼り付けでもできました。
黒背景の右上に、マウスを移動すると、コピーマークが発生します。
???　タブレット環境で、コピー貼り付けが実行できませんでした。???

https://live.sympy.org/

# 参考

以下、いつもの?おすすめです。

https://qiita.com/mrrclb48z/items/75904cdc6e84ecef4d03#%E5%8F%82%E8%80%83wolframalpha-%E9%96%8B%E7%99%BA%E7%89%A9%E8%AA%9E