1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pythonによる素数生成プログラム

Last updated at Posted at 2020-09-18

中身のない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()
1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?