【python_PAT_乙类】1013_数素数 ,Python运行超时解决方案
题目:
令 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
代码:
思路: 判断素数的时候,除数用素数列表,个数的限制还是按照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
结果: