首页 > 解决方案 > Python中的下一个质数

问题描述

我是 Python 的初学者,我正在练习编写我看到的这个问题的代码。需要下一个素数,但输入有限制。我已经搜索了类似的问题,但我的代码仍然无法正常工作。希望你能帮忙。谢谢!

我遇到的问题是当我输入 32 时,当下一个素数为 37 时,结果显示为 33...

到目前为止,这是我的代码。

num = int(input("Enter a positive number:"))   

import math

def nextprime(n):
    if n < 0:
      raise ValueError
  
    for next in range(n + 1, n +200):
        if next > 1:
            for i in range(2, next):
                if (next % i) == 0:
                    break
                else:
                    return next
   

标签: pythonprimes

解决方案


在您的代码中,当您到达提醒不为零的数字时,您会返回该数字。您需要为每个数字设置一个标志,此标志为 True,如果可以将标志转换为 False,则标志未转换为 false 的第一个数字返回该数字,如下所示。

不要使用next,因为这是一个内置函数。

试试这个:(我不改进你的代码)

def nextprime(n):
    if n < 0:
      raise ValueError
  
    for i in range(n + 1, n +200):
        if i > 1:
            pr = True
            for j in range(2, i):
                if (i % j) == 0:
                    pr = False
                    break
            if pr:
                return i
    return 'not found'

您也可以尝试此代码,编写函数来检查一个数字是否为素def is_prime数,然后输入 num find minnumber 的较大数字。(来自这个线程的这个答案。)

def is_prime(x):
    return all(x % i for i in range(2, x))

def next_prime(x):
    return min([a for a in range(x+1, 2*x) if is_prime(a)])

print(next_prime(32))

您也可以sympy像下面这样使用:(this answer from this thread。)

from sympy import *
nextprime(32) 

推荐阅读