我有一个函数,它接受一个数字(例如 5)并返回输入数字后的第一个素数(在本例中为 7)。
这是我的代码:
def prime(n):
np=[]
isprime=[]
for i in range (n+1,n+200):
np.append(i)
for x in range(2,199):
for j in np:
if x%j!=0:
isprime.append(x)
return min(isprime)
但是,此代码不起作用(它始终返回 2)。错误在哪里?
原文由 Jenny 发布,翻译遵循 CC BY-SA 4.0 许可协议
你有一些错误,最值得注意的是
np
显然是潜在的素数(它从n+1
这是第一个适合你的标准的潜在数字 “第一个素数之后输入数字” ),但您将x
添加到您的主要列表中,该列表来自range(2,199)
,您应该使用:结果,您的素性测试也是错误的方式,您应该使用:
最后,如果该条件在一种情况下为真,则不能附加数字,它必须在 所有 情况下都为真(其中 x 是满足
2 <= x < j
的整数),因此你应该切换你的第二组 for 循环(x
循环应该是内部循环),你也应该只循环到j-1
(被测试的数字)。此外,如果j % x == 0
,您应该选择 不 添加项目:这导致以下代码:
并试运行:
请注意,还有其他一些可以提高效率的方法,但是这个答案侧重于错误而不是改进