Python用无限制数组实现求素数,不限制质数的个数,用筛选的方法!

时间:2021-09-21 19:54:52

#相信很多人能写出比我还精简的算法

#但你能写出比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