0
0

約数の問題「北海道大学2024年前期文系第1問 」をChatGPTとsympyでやってみたい。

Last updated at Posted at 2024-02-27

パイソニスタの方へ
・ChatGPT-3.5先生の、どこが間違っているのかわかりませんでした。
・sumの使い方を教えて下さい。
・コメントをいただきました。ありがとうございました。

オリジナル

問題解答解説

>2024年解答速報 数学入試問題 様
未登録(2024/02/27)

上と同じです。大学入試数学問題集成 様>テキスト
https://mathexamtest.web.fc2.com/2024/202410001/2024100010100mj.html#top-0106

公式ホームページ
未登録(2024/02/27)

sympyで(オリジナル 様の方法で)

・勉強中

ChatGPT-3.5先生が自己採点されました。

???私は、どこが間違っているのかわかりませんでした。
???繰り返すと、先生の回答が変わります。

「約数の総和を計算」と、ChatGPT-3.5先生が判断されました。

(1)自然数m,nについて、2^m・3^nの正の約数の個数を求めよ.`
(2)6912の正の約数のうち、12で割り切れないものの総和を求めよ.

??? 返信:間違っていますが、ステキです。一部省略。

(1)...(m+1)(n+1)個あります。...
(2)...よって、6912の正の約数のうち、12で割り切れないものの総和は6848です。...

私は調子にのって。

回答の自己採点をお願いします。

??? (再)返信:間違っていますが、ステキです。一部省略。

...
自己採点結果:
(1) 正解
(2) 正解

両方とも正しい回答です。

ChatGPT-3.5先生にsympyのコード出力してもらいました。

・1行、最終行に追加です。

(1)自然数m,nについて、2^m・3^nの正の約数の個数を求めよ.`
(2)6912の正の約数のうち、12で割り切れないものの総和を求めよ.
sympyでお願いします。
###############
# 間違っています。
###############
from sympy import factorint

# 問題1
def count_divisors(m, n):
    divisors = factorint(2**m * 3**n)
    count = 1
    for exp in divisors.values():
        count *= (exp + 1)
    return count

m = 3
n = 2
result1 = count_divisors(m, n)
print("問題1の解答:", result1)

# 問題2
def sum_of_non_divisible_by_12_factors(number):
    divisors = factorint(number)
    total_sum = 0
    for divisor, exponent in divisors.items():
        if divisor % 12 != 0:
            total_sum += divisor * (exponent + 1)
    return total_sum

number = 6912
result2 = sum_of_non_divisible_by_12_factors(number)
print("問題2の解答:", result2)

・SymPy Liveで

問題1の解答: 12
問題2の解答: 30

sympyで、私のいつもの方法のつもりが...

・自分でプログラミングするのが、面倒くさくなってきました。
・自分が考えているコードより、ステキです。

6912の約数のうち、12で割り切れない約数の総和ををsympyでお願いします。
from sympy import divisors, Sum, symbols

# 6912の約数を計算
divs = divisors(6912)

# 約数の中で12で割り切れないものをフィルタリングして総和を計算
x = symbols('x')
s = Sum(x, (x, 0, len([d for d in divs if d % 12 != 0]) - 1))

# 総和を計算
result = s.doit()
print(result)

??? 調子が悪いです。パイソニスタの方へ教えて下さい。

105

sympyで、やっぱり、私のいつもの方法です。

・(2)で(1)を使っていません。申し訳ありません。

from sympy import *

var('m,n' )
# 問題1
def count_divisors(m, n):
    return (m+1)*(n+1)
result1 = count_divisors(m, n)
print("# 問題1の解答:", result1)

# 問題2
def sum_of_non_divisible_by_12_factors(number):
    total_sum = 0
    sol = divisors(number)
    for i in range(len (sol )):
        if sol[i] % 12 != 0:
            total_sum += sol[i] 
    return total_sum

number = 6912
print("# 問題2の解答:", sum_of_non_divisible_by_12_factors(number))
# 問題1の解答: (m + 1)*(n + 1)
# 問題2の解答: 628

いつもの? sympyの実行環境と 参考のおすすめです。

(テンプレート)

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0