高校入試整数 反比例「2024 愛知県高校入試 数学大問１(7)」をChatGPTとsympyでやってみたい。グラフ作図追加

長文です。

グラフ作図追加しました。(2024/03/13)
**・パイソニスタの方へ**
**・ChatGPT-3.5先生への、私の質問の仕方が悪いですか？**
**・sympyの直し方もわかりませんでした。**
**・結果だけなら2,3行で、できますか？**

# オリジナル
#### 中日進学ナビ 様
https://edu.chunichi.co.jp/site_home/highschool/pdf/2024_sugaku_q.pdf#page=4
　
#### 東進 様
**大問1(7)**。
2024/03/13
現在、ご利用いただけない状態となっております。
時間を置いて再度ご利用願います。

https://www.toshin.com/koukou_nyushi/files/2024/sugaku_q/aichi_sugaku_q.pdf#page=4
＜2024年全国公立高校入試解答速報｜大学受験の予備校・塾 東進
https://www.toshin.com/koukou_nyushi/

#### 東亜紗美moveforward数学教室 様
youtube　大問1(7)。途中からです。(1:06:07) 2024年愛知県公立高校入試＜数学＞解説
https://youtu.be/ogDFpAdUqW0?t=90

# ➀ChatGPT-3.5先生へ(計算のみ)
```
yがxに反比例し,x=4のときy=3である関数のグラフ上の点で、x座標とｙ座標がとも
に整数であり,x座標がy座標よりも小さい点は何個あるか。
```
？？？
```
...y 座標よりも小さい点は3つあります。
```
```
負の数も含めて下さい。
```
？？？
```
...全部で 12 個あります。
```
```
6個になりませんか
```
```
申し訳ありません、数え方に誤りがありました。再度、正しい方法で計算してみましょう。
```
```
...6+6=12 個の点が求められます。
```
```
sympyで
```
(途中省略)
・以下は、ChatGPT-3.5先生が出力されたソースコードです。
```python
from sympy import symbols, Eq, solve

# 変数の定義
x, y = symbols('x y')

# 与えられた関数
y = 12 / x

# x座標とy座標が整数である条件
integer_condition = Eq(y, 12 / x)

# x座標がy座標よりも小さい条件
inequality_condition = x < y

# x座標とy座標が整数であり、かつx座標がy座標よりも小さい点を求める
integer_points = []

for i in range(-12, 0):
    if integer_condition.subs(x, i).is_integer and inequality_condition.subs(x, i):
        integer_points.append(i)

for i in range(1, 13):
    if integer_condition.subs(x, i).is_integer and inequality_condition.subs(x, i):
        integer_points.append(i)

# 結果の出力
print("x座標とy座標がともに整数であり、かつx座標がy座標よりも小さい点の個数:", len(integer_points))
```
・SymPy Liveで(PC?でのみ実行できます。)

https://live.sympy.org/

```
x座標とy座標がともに整数であり、かつx座標がy座標よりも小さい点の個数:0
```
(私)？？？　私は、どこが間違っているかわかりませんでした。**教えて下さい。**

#### wolframalpha でも

https://www.wolframalpha.com/input?i=y%E3%81%8Cx%E3%81%AB%E5%8F%8D%E6%AF%94%E4%BE%8B%E3%81%97%2Cx%3D4%E3%81%AE%E3%81%A8%E3%81%8Dy%3D3%E3%81%A7%E3%81%82%E3%82%8B%E9%96%A2%E6%95%B0%E3%81%AE%E3%82%B0%E3%83%A9%E3%83%95%E4%B8%8A%E3%81%AE%E7%82%B9%E3%81%A7%E3%80%81x%E5%BA%A7%E6%A8%99%E3%81%A8%EF%BD%99%E5%BA%A7%E6%A8%99%E3%81%8C%E3%81%A8%E3%82%82+%E3%81%AB%E6%95%B4%E6%95%B0%E3%81%A7%E3%81%82%E3%82%8A%2Cx%E5%BA%A7%E6%A8%99%E3%81%8Cy%E5%BA%A7%E6%A8%99%E3%82%88%E3%82%8A%E3%82%82%E5%B0%8F%E3%81%95%E3%81%84%E7%82%B9%E3%81%AF%E4%BD%95%E5%80%8B%E3%81%82%E3%82%8B%E3%81%8B%E3%80%82

＞Wolfram|Alphaは，このクエリが理解できません．

# ➁ChatGPT-3.5先生へ(作図したい)　
・直し方がわからなかったので**あきらめました。** なんだかスゴすぎる。
```
yがxに反比例し,x=4のときy=3である関数のグラフ上の点で、x座標とｙ座標がとも
に整数であり,x座標がy座標よりも小さい点をsympyで作図したい。
```
(途中省略)
・以下は、ChatGPT-3.5先生が出力されたソースコードです。負の数が考慮されていません。
```python
import sympy as sp
import matplotlib.pyplot as plt

# 変数の定義
x = sp.Symbol('x')
y = sp.Symbol('y')

# 与式
eq = sp.Eq(y, 12 / x)

# x = 4 のときのyの値
y_value = eq.rhs.subs(x, 4)

# yが整数のときのxの値の範囲を求める
x_values = [i for i in range(1, 5)]

# x座標がy座標より小さい点を見つける
points = []
for val in x_values:
    y_val = eq.rhs.subs(x, val)
    if sp.Integer(y_val):
        if val < y_val:
            points.append((val, y_val))

# グラフの描画
x_points = [point[0] for point in points]
y_points = [point[1] for point in points]

plt.plot(x_points, y_points, 'bo')  # プロット
plt.xlabel('x')
plt.ylabel('y')
plt.title('Graph of the Function')
plt.grid(True)
plt.show()
```
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/b6a0c896-2e0c-1c9a-821f-0a03ec9abfa7.png)

# ③sympyで(私のいつもの方法で)
・私のこれで十分な気もします。
https://www.geeksforgeeks.org/python-sympy-divisors-method/
```python
from sympy import *
var('i',integer=True)
n =4*3
ic=0
for i in divisors(n):
    if -i< n/-i:
        ic+=1
for i in divisors(n):
    if i< n/i:
        ic+=1
print("#",ic)
# 6
```
・ついでに作図も。
・わからなかったので、stackoverflowをコピーしました。
https://stackoverflow.com/questions/73380769/how-to-plot-an-array-of-points-in-sympy-python3-onto-the-plot-of-a-function

```python
from sympy import *
from sympy import sympify, plot
var('x')
string = '12/x'
func = sympify(string, convert_xor=True)

from sympy import *
var('i',integer=True)
n =4*3
xp=[]
for i in list(reversed(divisors(n))):
    if -i< n/-i:
        xp=xp+[-i]
for i in divisors(n):
    if i< n/i:
        xp=xp+[i]
# 
string = '12/x'
guess = xp
guess_y = [func.subs('x', g).evalf() for g in guess]
ax1=plot(func, xlim=(-15, 15), ylim=(-15, 15), markers=[{'args': [guess, guess_y, 'ro']}],show=False)
ax2=plot(x,show=False)
ax1.extend(ax2)
ax1.show()
```
・おしい。でした。6個でした。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/e89ee4ee-d048-2d04-7a59-6f5f07efa1e5.png)

# オリジナル 様の方法で
勉強中
？？？比例定数

# いつもの? sympyの実行環境と 参考のおすすめです。
[(テンプレート)](https://qiita.com/mrrclb48z/items/00dd08b0317069be9342)

# いつもと違うおすすめです。