はじめに
プログラミングをしている中で、「あれ大学入試ってプログラミングで解ける問題もあるのでは?」と思ったのがきっかけでした。
プログラミングで解けそうだと思った問題の1つに、2021年に一橋大学で出題された「1000以下の素数は250個以下であることを示せ」について、シンプルかつ良問といった内容で、様々なところから声が上がり有名になった問題がありました。
今回はその問題について、プログラミングで証明してみようと思います。
下記がこの問題について紹介されている記事になります。
▼問題紹介記事
https://stanyonline.com/hitotubashi-math-prime-number-2021/
実行環境
実行環境は下記の通りです。
項目 | 内容 |
---|---|
使用言語 | Python3 |
実行環境 | paiza.io |
今回は、ブラウザ上で簡易的に実行し、特に実行環境のツール選定はしていません。
ソースコード
下記が作成したソースコードになります。
import time
# 数値N以下の素数をカウントする関数
def countPrime(N):
count = 0
for n in range(N+1):
if n <= 1:
continue
if n == 2:
count += 1
continue
for i in range(2,n,1):
if n % i == 0:
break
if i == n-1:
count += 1
return count
# 入力値抽出(今回は1000を入力)
number = int(input())
# 素数カウント/時間計測
start = time.perf_counter()
result = countPrime(number)
end = time.perf_counter()
# 出力
print(str(number)+'以下の素数は'+str(result)+'個です。') #1000以下の素数は168個です。
print('処理時間:' + str(end-start) + '秒') #処理時間:0.008200373500585556秒
結果
上記のソースコードのように、1000以下の素数は168個(250個以下)と求まり、
かつ処理時間も0.0082秒とほぼ時間がかかっていないことがわかりました!
最後に
一橋大学の数学は120分で5問(単純計算24分/問)の出題がされるので、このシステムを持っていったら、丸々1問解かなくて済むことから、1問に当てられる時間が6分増える(30分/問)計算になりますね。
実際、このソースコードを大学入試の解答欄に書いたら、採点官はどう思うのか、そして点を与えるのか気になるところです。
個人的には、今後プログラミングの需要も増加するので、「おおこの学生おもろいやん」って採点官側になって満点を取らせた方が日本の未来はよりよくなるんじゃないかとも思いますね