中身のないprime.txtを別途用意してください。
prime.py
import math
num = 3 #探索を開始する数
prime = [2] #素数に2を追加
prm_cnt = 1 #発見した素数をカウントする変数
pfile = 'prime.txt' #発見した素数を書き込むファイル
####################################################################
#Function Description: 前回実施した素数リストのファイル読込関数
####################################################################
def load_prime():
global prm_cnt
global prime
global num
file_data = open(pfile, "r")#ファイル読み込み
print("!! load start !!\n")
for line in file_data:
prime.append(int(line))
num = int(line)
print("!! load end !!\n")
file_data.close()
prm_cnt = len(prime)
####################################################################
#Function Description: 素数を発見したらフラグを立てる関数
#Arg1: 素数か判定する数 これまで出現してきた素数で割って余りが出ないかチェック
#Arg2: これまでに発見された素数の数
#Arg3: 素数のリスト 関数外から参照可能
#Return: 素数判定FLAG
####################################################################
def prime_func(num ,prm_lp, prm ):
cnt = 0
ret = "FALSE"
for j in range(0,prm_lp):
rem = num % prm[j]
if rem == 0:
cnt = 1#FALSE
break
if cnt == 0:
prm_lp = prm_lp + 1#新しい素数をカウント、次の素数発見のための割り算回数が1増える
prm.append(num)#新しい素数をリストに追加
ret = "TRUE"
return ret
####################################################################
#Function Description: 素数探索
####################################################################
def calc_prime():
global prime
global prm_cnt
global num
pfile = 'prime.txt'
E_OK = "TRUE"
out_file = open(pfile,'a')
while 1 :
ret = prime_func(
num, #素数か判定する数
prm_cnt, #素数の発生した数
prime #素数のリスト
)
if E_OK == ret: #素数発見
print(str(prime[len(prime)-1]) )
prm_cnt = prm_cnt + 1
out_file.write(str(num) + "\n")
num = num + 2 #奇数の中にしか素数はないため2ずつ探索
out_file.close()
####################################################################
#Function Description: main関数
####################################################################
def Main():
load_prime()
calc_prime()
if __name__=="__main__":
Main()