原题链接:PTA | 程序设计类实验辅助教学平台
Tips:以下Python代码仅个人理解,非最优算法,仅供参考!
def is_prime(n):
if n <= 3:
return n >= 2
else:
#如果不与6的倍数相邻,肯定不是素数
if n % 6 != 5 and n % 6 != 1:
return False
#对6倍邻数进行判断,是否为6倍邻数的倍数
for i in range(5, int(n**0.5)+1, 6):
if n % i == 0 or n % (i+2) == 0:
return False
return True
M,N=map(int,input().split())
count = 0
ls = []
for n in range(2,105000): #最大取值Pn为10^4,第1w个素数是105000范围内
if count >= N:
break
else:
if is_prime(n):
count+=1
ls.append(n)
row = 0
for i in range(M-1,N):
row+=1
if row%10==0: #每10个一行
print(ls[i],end='\n')
elif i==N-1: #循环结束的最后一个
print(ls[i])
else: #正常输出带空格
print(ls[i],end=' ')
#常规算法,测试点4素数10^4超时
# def is_prime(n):
# if n < 2:
# return False
# for i in range(2,int(n**0.5)+1):
# if n%i==0:
# return False
# return True
#以下miller rabin米勒-拉宾素性检验算法,测试点4素数10^4超时
# import random
# def miller_rabin(n, k=2): #K=1结果不准,K=2依然测试点4超时
# if n == 2 or n == 3:
# return True
# if n % 2 == 0:
# return False
# r, s = 0, n - 1
# while s % 2 == 0:
# r += 1
# s //= 2
# for _ in range(k):
# a = random.randint(2, n - 2)
# x = pow(a, s, n)
# if x == 1 or x == n - 1:
# continue
# for _ in range(r - 1):
# x = pow(x, 2, n)
# if x == n - 1:
# break
# else:
# return False
# return True