题目描述
令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
代码:
def is_prime(num): if num == 0 or num == 1: return 0 for i in range(2, num): if num % i != 0: continue else: return 0 break return 1 def prime_list(M, N): l = [] for i in range(10001): if is_prime(i): l.append(i) k = 0 for i in range(M+1, N+1): print(str(l[i]) + ' ', end='') k = k + 1 while k % 10 == 0: print('\n') break print(str(l[N+1])) s = input() l = s.split() M = int(l[0]) N = int(l[1]) prime_list(M, N)
上面代码本地可以运行,但是内存和时间上可能超出限制了,因此提交没有通过。(还有一些细节有误)
修改一下代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
# 判定是否为素数
def is_prime(num):
if
num ==
0
or num ==
1
:
return
0
if
num ==
2
:
return
1
for
i in range(
2
,
int
(num **
0.5
) +
1
):
if
num % i !=
0
:
continue
else
:
return
0
break
return
1
# 素数的生成器
def prime_gen():
i =
2
while
True:
if
is_prime(i):
yield i
i +=
1
input_s = input()
l = input_s.split()
M, N =
int
(l[
0
]),
int
(l[
1
])
k, p =
1
,
1
for
i in prime_gen():
if
k <= N -
1
and k >= M and p %
10
!=
0
:
print(str(i) +
' '
, end=
''
)
p +=
1
elif k <= N -
1
and k >= M and p %
10
==
0
:
print(str(i))
p +=
1
elif k == N:
print(str(i))
break
k = k +
1
|
prime_gen()是一个生成器函数