【python_PAT_乙类】1013_数素数 ,Python运行超时解决方案

题目:

令 P​i​​ 表示第 i 个素数。现任给两个正整数 M≤N≤10​4​​,请输出 P​M​​ 到 P​N​​ 的所有素数。

输入格式:
输入在一行中给出 M 和 N,其间以空格分隔。
输出格式:
输出从 P​M​​ 到 P​N​​ 的所有素数,每 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

  



代码:
思路: 判断素数的时候,除数用素数列表,个数的限制还是按照math.sqrt()
代码:
 1 # 数素数
 2 import math
 3 
 4 
 5 def is_prime_num(test_num, prime_nums):
 6     len_num = math.sqrt(test_num)+1
 7     for k in prime_nums:
 8         if k < len_num:
 9             if test_num % k == 0:
10                 return False
11         else:
12             break
13     return True
14 
15 
16 list_num = list(map(int, input().split()))
17 max_num = list_num[1]
18 min_num = list_num[0]-1
19 count_actual_prime_num = 1
20 list_prime_num = []
21 i = 3
22 if max_num == 1:
23     print(2)
24 elif min_num+1 == 1:
25     print(2, end=' ')
26 if max_num > 1:
27     while count_actual_prime_num < max_num:
28         if is_prime_num(i, list_prime_num):
29             count_actual_prime_num += 1
30             list_prime_num.append(i)
31             if count_actual_prime_num > min_num:
32                 if (count_actual_prime_num-min_num) % 10 != 0 and count_actual_prime_num != max_num:
33                     print(i, end=' ')
34                 else:
35                     print(i)
36         i += 2

结果:

 
posted @ 2020-06-15 15:12  ninarMing  阅读(464)  评论(0编辑  收藏  举报