在 Python 中查找下一个素数

新手上路,请多包涵

我有一个函数,它接受一个数字(例如 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 许可协议

阅读 833
1 个回答

你有一些错误,最值得注意的是 np 显然是潜在的素数(它从 n+1 这是第一个适合你的标准的潜在数字 “第一个素数之后输入数字” ),但您将 x 添加到您的主要列表中,该列表来自 range(2,199) ,您应该使用:

 isprime.append(j)

结果,您的素性测试也是错误的方式,您应该使用:

 j % x != 0

最后,如果该条件在一种情况下为真,则不能附加数字,它必须在 所有 情况下都为真(其中 x 是满足 2 <= x < j 的整数),因此你应该切换你的第二组 for 循环( x 循环应该是内部循环),你也应该只循环到 j-1 (被测试的数字)。此外,如果 j % x == 0 ,您应该选择 添加项目:

 for ...:
    val_is_prime = True
    for ...:
        if j % x == 0:
            val_is_prime = False
            break
    if val_is_prime:
        isprime.append(j)

这导致以下代码:

 def prime(n):
    np=[]
    isprime=[]
    for i in range (n+1,n+200):
        np.append(i)
    for j in np:
        val_is_prime = True
        for x in range(2,j-1):
            if j % x == 0:
                val_is_prime = False
                break
        if val_is_prime:
            isprime.append(j)
    return min(isprime)

并试运行:

 >>> prime(5)
7
>>> prime(13)
17
>>> prime(23)
29


请注意,还有其他一些可以提高效率的方法,但是这个答案侧重于错误而不是改进

原文由 Nick stands with Ukraine 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题