Python中的下一个素数

wlsrxk51  于 2023-01-29  发布在  Python
关注(0)|答案(5)|浏览(163)

我是Python初学者,看到这个问题,我正在练习编码,需要Next prime,但是输入有限制,我搜索过类似的问题,但是我的代码还是不行,希望大家能帮忙,谢谢!
我得到的问题是当我输入32的时候,结果显示33当下一个质数是37的时候...
这是我目前的代码。

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
46qrfjad

46qrfjad1#

在你的代码中,当你到达一个提醒不为零的数字时,你返回那个数字。你需要为每个数字设置一个标志,如果可以除,这个标志为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找到min数字下一个. (这个答案从这个thread .)

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,如下所示:* (此答案来自此thread。)*

from sympy import *
nextprime(32)
gxwragnw

gxwragnw2#

def next_prime(n):
    while True:
        n=n+1
        for i in range (2,int(n/2)):
            if n%i==0:
                break
        else:
            return n

print(next_prime(67))
kxxlusnw

kxxlusnw3#

一些离题提示:
1.正如user1740577提到的,不要使用next作为变量名
1.尽可能避免使用eval,在这里可以,但在真实的项目中,这将导致大禁忌。
1.将导入放在脚本的最顶端
1.考虑仅对迭代使用变量名ij
1.对于重复的except数据块,请使用(Error, Error)
至于你的问题的解决方法,如果你不介意的话,我做了一些调整

def next_prime(n: int) -> int:
    if n < 0:
        raise ValueError('Negative numbers can not be primes')
    # Base case
    if n <= 1:
        return 2
    
    # For i as every odd number between n + 1 and n + 200
    for i in range(n + 1 + (n % 2), n + 200, 2):
        # For every odd number from 3 to i (3 because we covered base case)
        for j in range(3, i, 2):
            # If remained is equals to 0
            if not i % j:
                # break current loop
                break
        # If loop j didn't break [nobreak: ]
        else:
            return i
    raise RuntimeError('Failed to compute next prime number :c')

def main():
    while True:
        try:
            num = int(input('Enter positive number: '))
            print(f'Next prime is: {next_prime(num)}')
            break
        except ValueError:
            print('Please enter a positive integer!')

if __name__ == '__main__':
    main()
eit6fx6z

eit6fx6z4#

对@rajendra-kumbar中的代码进行了一些速度改进:

#!/usr/bin/env python

import sys
import time
import math

def next_prime(number):
    if number < 0:
        raise ValueError('Negative numbers can not be primes')
    # Base case
    if number <= 1:
        return 2

    # if even go back 1
    if number % 2 == 0:
        number -= 1
    while True:
        # only odds
        number += 2
        #only need to check up to and including the sqrt
        max_check = int(math.sqrt(number))+2
        # don't need to check even numbers
        for divider in range(3, max_check, 2):
            # if 'divider' divides 'number', then 'number' is not prime
            if number % divider == 0:
                break
        # if the for loop didn't break, then 'number' is prime
        else:
            return number

if __name__ == '__main__':
    number = int(sys.argv[1].strip())
    t0 = time.time()
    print('{0:d} is the next prime from {1:d}'.format(next_prime(number), number))
    run_time = time.time() - t0
    print('run_time = {0:.8f}'.format(run_time))

它速度大约是原来的两倍

dkqlctbz

dkqlctbz5#

你可以试试简单的方法:

def is_prime(number:int):
 check = 0
 for i in range(2,number):
    if number % i == 0:
        check += 1
 if check == 0:
    return True
 else:
    return False

def next_prime(value):
 check = value + 1
 while is_prime(check) is False:
    check += 1
 return check

value = int(input("Insert the number: "))
print(next_prime(value))

相关问题