题目描述:令Pi表示第i个素数。现任给两个正整数M <= N <= 10000,请输出PM到PN的所有素数。
tips:素数判断:只能被1和自身整除。判断方法:不能被2到之间的任何数整除,数字2除外。偶数必然不是素数(除了2),所以判断时可以从3开始,每次递增2,可以不用判断偶数。
输入描述:
输入在一行中给出M和N,其间以空格分隔。
tips:M表示第M个素数,N表示第N个素数,要求输出第M个和第N个素数之间的所有素数
求解时求出第一个到第N个素数,从第M个开始输出
输出描述
输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。
tips:注意最后一个数的输出格式,需要换行
输入
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
方法一:
import math
def judgeprime(num):
for i in range(2, int(math.sqrt(num))+1):
if num % i == 0:
return False
return True
nums = list(map(int, input().split(' ')))
count = 1
num = 3
prime = ["2"]
while count < nums[1]:
if judgeprime(num):
prime.append(str(num))
count += 1
num += 2
index = 0
for i in range(nums[0]-1, len(sushu)):
index += 1
if index % 10 == 0:
print(sushu[i])
elif i == len(sushu)-1:
print(sushu[i])
else:
print(sushu[i], end=' ')
附上大佬的代码:妙啊
#Author:华科平凡
import math
def isPrime(n):
if n <= 1:
return False
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
while True:
try:
res = ["2"] #以字符方式存储,便于输出格式符合题目要求
start = 3
a,b=map(int,input().split())
while len(res) < b:
if isPrime(start):
res.append(str(start))
start += 2 #递增2,减少判断次数
for i in range(a-1,b,10):
print(" ".join(res[i:i+10]))
except:
break
solution
import math
def judgeprime(num):
for i in range(2, int(math.sqrt(num))+1):
if num % i == 0:
return False
return True
nums = list(map(int, input().split(' ')))
count = 1
num = 3
prime = ["2"]
while count < nums[1]:
if judgeprime(num):
prime.append(str(num))
count += 1
num += 2
for i in range(nums[0]-1, nums[1], 10):
print(" ".join(prime[i:i+10]))
方法二:倒是可以不需要从2,直接试除到根号 n。快速某个数是不是素数,只需要判断这个数是否可以被小于这个数的平方根的素数整除即可。 因为素数的数量不多(相对所有的都尝除一遍),所以速度会快很多。
# 链接:https://www.nowcoder.com/questionTerminal/e0fb49acb75f47e8b6fa2077d9071799
# 来源:牛客网
#作者:大虫航
#coding=utf-8
M, N = map(int, input().split(" "))
Max = 10000000
def find(M, N):
ans = [0, 2]
for i in range(3, Max):
if len(ans) > N:
break
j = 1
flag = 1
while ans[j] <= i**0.5:
if i % ans[j] == 0: #能被整除 立马退出不用看其他的
flag = 0
break
j += 1
if flag:
ans.append(i)
return ans
ans = find(M, N)
i = M
count = 1
while i <= N:
if count % 10 == 0:
print(ans[i])
else:
print(ans[i])
count += 1
i += 1
集成版:
import math
def judge(num, prime):
i = 0
while int(prime[i]) <= math.sqrt(num):
if num % int(prime[i]) == 0:
return False
i += 1
return True
prime = ["2"]
m, n = map(int, input().split(' '))
count = 1
num = 3
while count < n:
if judge(num, prime):
prime.append(str(num))
count += 1
num += 2
for i in range(m-1, n, 10):
print(" ".join(prime[i:i+10]))