我在编写一个程序时遇到了问题,该程序在用户输入的整数“n”上下查找5个素数
注:如果少于5个素数,则打印数量应尽可能小。如果n本身是素数,则不应包含它。不允许使用列表或函数
这是我应该得到的输出:
Please enter n: 20
Larger prime numbers: 23 29 31 37 41
Smaller prime numbers: 19 17 13 11 7
这是我的尝试:
n = int(input("Number: "))
# n = 20
count1 = 0
x = 2
while count1<5:
for i in range(2, n+x):
if (n+x) % i ==0:
break
else:
print(n+x)
count1 += 1
break
x +=1
此代码通过以下方式工作:
代码
测试
这篇文章中的答案提供了一个优秀的函数形式来测试素性(AKS素性测试):
How to create the most compact mapping n → isprime(n) up to a limit N?
而且测试不需要找到任何素数的“记忆”
然后,任务是对该函数进行编码,而不使其成为实际函数
例如,22的输出为
还有一个例子:
时间测试
对于较大的数字,此算法的速度要快得多
例如,对数字5564445的该算法进行
timeit
测试,执行1000次,耗时2.66秒。用简单的方法除以每个数字直到找到一个除数,需要1小时40分钟相关问题 更多 >
编程相关推荐