Python用無限制數組實現求素數,不限制質數的個數,用篩選的方法!,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 #找下一個質數去