题目 6: 求解100以内的所有素数¶
solve¶
def prime(n):
'''
傻瓜法
'''
prime = []
for i in range(2, n+1):
if is_prime(i):
prime.append(i)
return prime
def is_prime(n):
if n == 2:
return True
for i in range(2, n):
if n % i == 0:
return False
return True
第2种解法 将素数判断的遍历长度缩减到 sqrt(n)
def prime(n):
'''
sqrt n 法
'''
prime = []
for i in range(2, n+1):
if is_prime(i):
prime.append(i)
return prime
def is_prime(n):
if n == 2:
return True
for i in range(2, floor(sqrt(n))+1):
if n % i == 0:
return False
return True
第3种方法 埃拉托斯特尼筛法
def prime_3(n):
'''
普通筛法 埃拉托斯特尼筛法
'''
check = np.ones(n+1)
prime = []
for i in range(2, n+1):
if check[i]:
prime.append(i)
# 此循环也可以和上层 if 并列 但这样效率高一些
for j in range(2*i, n+1, i):
check[j] = 0
return prime
第4种方法 线性筛法 欧拉筛法
def prime_4(n):
'''
线性筛法 欧拉筛法
'''
check = np.ones(n+1)
prime = []
tot = 0
for i in range(2, n+1):
if check[i]:
prime.append(i)
tot += 1
for j in range(tot):
if i * prime[j] > n:
break
check[i * prime[j]] = 0
if i % prime[j] == 0:
break
return prime