試し割り法とエラトステネスの篩による素数生成

import math # 平方根の計算 sqrt にのみ利用

def tamesiwari(n):
    yakusuu=0
    for i in range(1,n+1):
        if(n%i==0):
           yakusuu=yakusuu+1
    return yakusuu

def furui(tlist, slist): # tlist:探索リスト, slist:素数リスト
    # 探索リストの先頭の数を素数リストに移動
    s=tlist.pop(0)
    print(s)
    slist.append(s)
    print(slist)
    # 探索リストのふるい落とし処理
    i=0
    for val in tlist:
        if(val%s==0):
            del tlist[i]
        i+=1
    print(tlist)
    # 探索リストの先頭値が数列の最大値の平方根に達するまで行う
    x=max(tlist)
    print(tlist[0], math.sqrt(x))
    if tlist[0] > math.sqrt(x):
        return tlist, slist
    # ふるい落とし処理の再帰呼び出し
    return furui(tlist, slist)

# エラトステネスの篩
def eratosthenes(x):

    # step 1
    tansakulist=[]
    tansakulist=list(range(2,x+1))
    print(tansakulist)

    # step2,3
    sosuulist=[]
    tansakulist, sosuulist = furui(tansakulist, sosuulist)

    # step4
    sosuulist.extend(tansakulist)

    return sosuulist

#n=
#for p in range(n,n+10):
#    if (tamesiwari(p)==2): # 試し割りの結果、約数の数量が2なら素数
#        print (p)

n = 26640483611824783825980077284251126959643154875431494492573037148561576194154184967684133407808241519378364083601700869966787931424796373816830749899282834223587532058268929912670892070676298193701529146795024207954976461139721153243891278235345376333179594026610249677526069249327326349120860403474817583705917900485139065225650861288050992982630527478054745857005054591705621770886268621387816467159000699502254793894406982648327242800670612163012899640036439024993503089700282998008573059031154601152122932316556268855145599004150582164688388061834521863831053705155025891664155040237275594781567983128101356634010

print(eratosthenes(n))

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です