#はじめに
私がPythonを勉強して一通り基本となる構文を学んだところで作った、「入力された整数nが素数なのか合成数なのか判定するプログラム」です。自分の日記的な意味合いも兼ねて書いています。
まだまだ至らない点が多いと思いますが、アドバイスなどが有りましたらよろしくおねがいします。
#プログラムの原理
今回の素数の判定方法は「入力された n に対して、n の約数が√nまでの素数に無ければ素数である。」という事実に基づいて行いました。
詳しい証明は以下をご覧ください。
自然数nが√n以下のすべての素数で割り切れなければ,nは素数であることの証明
#実際のプログラム
import math
from sympy import primerange
n = int(input("素数か確かめたい数を入力してください。>> "))
num = int(math.sqrt(n)) + 1
primlist = list(primerange(2,num)) #1
for i in primlist: #2
if n % i == 0: #3
print("合成数です。")
break
elif i == primlist[-1] :
print("素数です。")
###大まかな流れ
- 素数リストを√nまでの数字で作成する。
- nを素数リストで割ってみる。
- 割り切れたら「合成数です。」と表示する。素数リストの最後まで行ったら「素数です。」と表示する。
###実際やっていること
1.は#1で、SymPyのprimerangeを用いることにより、素数リストを作成しました。
2.は#2で、for構文を用いて素数リストから文字を取り出しています。
3.は#3で、if構文を用いて「n を素数で割った余りが0か否か」で判定しています。
#反省点
初めて素数判定を作りましたが、動くものができて個人的に満足しています。
しかし、n が大きくなると(7桁を超える)と途端に計算速度が遅くなってしまうので、なんとか改善したいです。
また、よく考えたらmathを使う必要がなかったので修正したいと思います。初めての自作プログラムなので今回は記念に残しています。
このプログラムを用いれば素因数分解もできそうな気がしてきたので手を加えてみたいとおもいます。
最後まで読んでくださいまして有難うございました。