题目介绍:
令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
代码实现思想:
1.定义一个判断素数的函数(可优化:线性筛选法)
2.定义一个存储到0-PN的素数列表
3.结果的数据切片,PM-PN
4.格式化输出(这个浪费了很多时间精力去解决,一开始处理的方法是注释的代码,只能通过部分测试样例,原因是输出行不满足10个的时候,增加了空格,后修复通过提交)
代码实现:
import math
#判断一个数是不是素数
def isprime(num):
if num == 0:
return 0
if num == 1:
return 0
if num == 2:
return 1
else:
for i in range(2,int(math.sqrt(num))+1):
if num%i == 0:
return 0
return 1
def main():
prime_list =[2,3]
num_list = input().split(" ")
num_left,num_right = int(num_list[0]),int(num_list[1])
n = 4
while len(prime_list) <= num_right:
n = n + 1
if isprime(n) == 1:
prime_list.append(n)
result_prime = prime_list[num_left-1:num_right]
primes = [str(i) for i in result_prime]
print ("\n".join([i + 10 > len(primes) and " ".join(primes[i:]) or " ".join(primes[i:i+10]) for i in range(len(primes)) if i % 10 == 0]))
# count = 0
# for i in primes:
# print(i,end = " ")
# count = count +1
# if count % 10 == 0:
# print('')
if __name__ == "__main__":
main()
原文链接:https://blog.csdn.net/xulili18714852395/article/details/105291088