质数:即为素数,在大于1的自然数中,除了1和它本身不再有其它因数的自然数
即对于质数x因子只有1和x,2到x-1中均无x的因子
素数朴素判定法代码:
def is_prime(x):
if x<=1:
return False
for i in range (2,int(x**0.5)+1):
if x%i==0:
return False
return True
埃式筛法:即从小到大枚举所有的数每次找到一个质数则将其倍数全部删除
获取2到n的所有素数组成一个数组
最后生成一个prime数组里面存储从2到n的所有质数
代码实现思路:
维护一个vis数组表示该数字是否被删除
维护一个prime数组存储所有的质数
n=int(input())
##维护一个vis数组表示该数字是否被删除
##被删除标记为1证明该数字不是素数
vis=[0]*(n+10)
def get_prime(n):
prime=[]
vis[0]=vis[1]=1
for i in range (2,n+1):##因为从小到大边枚举边删除所以不需要先找到素数再枚举
if vis[i]==0:
##如果该数字未被删除则它是一个素数
prime.append(i)##插入素数
for j in range (i+i,n+1,i):
##标记所有倍数
vis[j]=1
return prime
ls=get_prime(n)
质数分布定理:正整数N的质数的个数基本上不超过N//10个