题目:
令 Pi表示第 i 个素数。现任给两个正整数 M≤N≤104 ,请输出 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
思路:
首先使用了1007中的思想,发现有两个判定超时。随后使用用空间换时间的方法,原理非常简单:一个大范围内所有数字标记为true,找到一个素数将大范围内此素数的所有倍数全标记为false,并将此素数加入队列。依次选择素数进行标记(标记为true的数即为素数)。
python代码:
str1 = list(map(int , input().split()))
l = []
num = 3
flag = [True]*(150005)
p=2
while(p<=150000):
l.append(p)
for i in range(2*p,150000,p):
flag[i] = False
while 1:
p += 1
if(flag[p]==True):
break
l = l[str1[0] - 1 :str1[1]]
for i in range(len(l)):
if (i+1)%10 == 0:
print(l[i])
elif i == str1[1]-str1[0]:
print(l[i], end='')
else:
print(l[i], end=' ')