题目描述
令Pi表示第i个素数。现任给两个正整数M <= N <= 10000,请输出PM到PN的所有素数。
输入描述:
输入在一行中给出M和N,其间以空格分隔。
输出描述:
输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。
输入例子:
5 27
输出例子:
11 13 17 19 23 29 31 37 41 43
47 53 59 61 67 71 73 79 83 89
97 101 103
语言:Python3
def sieve_of_eratosthenes(n): # 埃拉托色尼筛选法,返回少于n的素数
primes = [True] * (n+1) # 范围0到n的列表
p = 2 # 这是最小的素数
while p * p <= n: # 一直筛到sqrt(n)就行了
if primes[p]: # 如果没被筛,一定是素数
for i in range(p * 2, n + 1, p): # 筛掉它的倍数即可
primes[i] = False
p += 1
primes = [element for element in range(2, n) if primes[element]] # 得到所有少于n的素数
return primes
M,N = input().split()
a = 1
primes = sieve_of_eratosthenes(104744)
for i in range(int(M)-1,int(N)):
if a == 10 or i == int(N)-1:
print("%d"%primes[i],end='\n')
a = 1
else:
print("%d"%primes[i],end=' ')
a += 1