今回は受験シーズンにつき
大学の入試問題をプログラムで解いてみました。
解説動画はこちら
一橋大学さんの2021年の数学の入試問題です。
問題は
さて
私は偏差値20位しかないので
普通に解いたら解くことはできません。
プログラムの力を使って
強引に解いていきましょう。
まずは1000以下の素数を列挙したれば
個数がわかります。
素数を列挙してみましょう。
素数を判定するプログラムを書いても良いですが
面倒くさいのでライブラリを用います。
Python言語ではsympyという数学計算ライブラリがあり
それを用いると計算はめっちゃ楽です。
isprimeという素数かどうかを判定する
メソッドがあるのでそれを用いましょう。
素数だと判定された数を
リストに格納して個数を数えます。
ということで
250個以下であるということは
わかりましたね。
でもこれだと素数を列挙して
答案用紙に書くのは大変そうですね。
別の解き方も考えてみましょう。
素数の倍数を挙げ
それが750個以上出れば
素数は250個以下であることが
示ると思います。
それでは素数の小さい方から
その倍数の個数を数えていきましょう。
2が一番小さいですね。
2の倍数で考えると2は素数なので候補ではなく
4から1000まで数えることになります。
こんな感じで2の倍数のリストを
作ることができます。
2の倍数の時点で499個ですね
次は3の倍数です。
5の倍数もいきましょう。
この時点でリストの個数は
ということで、リストの個数は
1000個を超えましたが
このリストは重複が含まれています。
プログラム言語では重複を排除する方法として
セットというデータ型を使うことができます。
pythonでは set() でリストをセットに変換できます。
重複を排除したら731個になってしまいました。
7の倍数も追加してみましょう。
768
7の倍数を追加すると素数でないものの数が
750を超えました。
ということで素数が250個以下になることが
わかるかと思います。
あとは解答用紙にどう書くかですかね
そこは知りません!!!!!
ということで今回は
数学の問題をプログラムで解いてみました。
プログラムの勉強にはちょうど良い題材ですね。
それでは。
大学の入試問題をプログラムで解いてみました。
解説動画はこちら
一橋大学さんの2021年の数学の入試問題です。
問題は
1000以下の素数は250個以下であることを示せ
さて
私は偏差値20位しかないので
普通に解いたら解くことはできません。
プログラムの力を使って
強引に解いていきましょう。
まずは1000以下の素数を列挙したれば
個数がわかります。
素数を列挙してみましょう。
素数を判定するプログラムを書いても良いですが
面倒くさいのでライブラリを用います。
Python言語ではsympyという数学計算ライブラリがあり
それを用いると計算はめっちゃ楽です。
isprimeという素数かどうかを判定する
メソッドがあるのでそれを用いましょう。
素数だと判定された数を
リストに格納して個数を数えます。
from sympy import isprime
prime=[]
for i in range(1,1001):
if isprime(i):
prime.append(i)
print(len(prime))
168ということで
250個以下であるということは
わかりましたね。
でもこれだと素数を列挙して
答案用紙に書くのは大変そうですね。
別の解き方も考えてみましょう。
素数の倍数を挙げ
それが750個以上出れば
素数は250個以下であることが
示ると思います。
それでは素数の小さい方から
その倍数の個数を数えていきましょう。
2が一番小さいですね。
2の倍数で考えると2は素数なので候補ではなく
4から1000まで数えることになります。
こんな感じで2の倍数のリストを
作ることができます。
bai_2 = [i for i in range(4,1001,2)] len(bai_2)499
2の倍数の時点で499個ですね
次は3の倍数です。
bai_3 = [i for i in range(6,1001,3)] len(bai_3)332
5の倍数もいきましょう。
bai_5 = [i for i in range(10,1001,5)] len(bai_5)199
この時点でリストの個数は
len(bai_2 + bai_3 + bai_5)1030
ということで、リストの個数は
1000個を超えましたが
このリストは重複が含まれています。
プログラム言語では重複を排除する方法として
セットというデータ型を使うことができます。
pythonでは set() でリストをセットに変換できます。
sets = set(bai_2 + bai_3 + bai_5) print(len(sets))731
重複を排除したら731個になってしまいました。
7の倍数も追加してみましょう。
bai_7 = [i for i in range(14,1001,7)] print(len(bai_7)) sets = set(bai_2 + bai_3 + bai_5 + bai_7) print(len(sets))141
768
7の倍数を追加すると素数でないものの数が
750を超えました。
ということで素数が250個以下になることが
わかるかと思います。
あとは解答用紙にどう書くかですかね
そこは知りません!!!!!
ということで今回は
数学の問題をプログラムで解いてみました。
プログラムの勉強にはちょうど良い題材ですね。
それでは。
