Python用無限制數組實現求素數,不限制質數的個數,用篩選的方法!

#相信很多人能寫出比我還精簡的算法

#但你能寫出比Python還優雅的算法嗎?!


import math #動用並 import 導入 math 函數

A=[]    #A[]裏放質數數列, 每次用 A.append(X)壓棧進去的是挑得的質數(列)……#定義一個數組並且不初始化,因爲不知道這個數組要用多少個元素呢
        # X爲被除數, j 爲內循環變量, A[j]爲 用來試除的除數


A.append(1) #A[0]=1 爲數組賦初始值,因爲要便於循環
A.append(2) #A[1]=2


X=1    #2==X 時去執行第一次循環
while True: #無限循環
    X=X+1
    isPrime=1 #默認 (假設)X 是個質數??  一直到判斷出 X不是質數 那是讓 isPrime=0
    x1=int( math.sqrt(X)  )     #第二個退出條件是: j 大於了 X的平方根(+1)  即x2
                                #第一個退出條件是: A[j]大於了 X 的平方根(即x1)   
    x2=x1+1
    for j in range(1, x2 ):
        if A[j]>(x1 ):
            break
        if 0==X%A[j]:
            isPrime=0
            break
    if 1==isPrime: #終於找到一個X 是質數咯,
        A.append(X) #壓棧,
        print (X)   #並輸出吧!




#第二種思路: 還是用篩選,只是把增加 X (X=1+X) 後置

#再問一次你能寫出比Python還優雅的算法嗎?!

import math #動用並 import 導入 math 函數


A=[]    #定義一個數組並且不初始化,因爲不知道這個數組要用多少個元素呢
        # X爲被除數, j 爲內循環變量, A[j]爲 用來試除的除數

A.append(1) #A[0]=1 爲數組賦初始值,因爲要便於循環
A.append(2) #A[1]=2


X=2    #2==X 時去執行第一次循環
while True: #無限循環
    
    isPrime=1 #默認 (假設)X 是個質數??  一直到判斷出 X不是質數 那是讓 isPrime=0
    x1=int( math.sqrt(1+X)  )     #第二個退出條件是: j 大於了 X的平方根(+1)  即x2
                                #第一個退出條件是: A[j]大於了 X 的平方根(即x1)   
    x2=1+x1      #x1+1
    for j in range(1, x2 ):
        if A[j]>(x1 ):
            break
        if 0==X%A[j]:
            isPrime=0
            break
    if 1==isPrime: #終於找到一個X 是質數咯,
        A.append(X) #壓棧,
        print (X)   #並輸出吧!
        
    X=X+1   #找下一個質數去



#第三種方法

#固定數組的長度


import math


A=[i for i in range(100)]   #利用固定長度的數組


x=1
A[1]=1


x+=1
i=1     #數組的下標
#for x in range(2,100):
while i<100:
    
    x1=int(math.sqrt(x))
    isPrime=1
    for j in range(2,1+x1):
        if A[j]>x1:
            break
        elif 0==x % A[j]:
            isPrime=0
            break
    if 1==isPrime:
        A.append(x)
        print (x)
        i+=1


    x+=1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章