Python 试图找到下一个素数

Python 试图找到下一个素数,python,Python,MyFunctions文件- def factList(p,n1): counter = 1 while counter <= n1: if n1 % counter == 0: p.append(counter) counter = counter + 1 def isPrime(lst1,nbr): factList(lst1, nbr) if len(lst1) == 2:

MyFunctions文件-

def factList(p,n1):
    counter = 1
    while counter <= n1:
        if n1 % counter == 0:
            p.append(counter)
        counter = counter + 1    



def isPrime(lst1,nbr):
    factList(lst1, nbr)
    if len(lst1) == 2:
        return True
    else:
        return False





def nextPrime(nbr1):
    cnt1 = 1
    while cnt1 == 1:
        nbr1 == nbr1 + 1
        if isPrime(lst2,nbr1):
            cnt1 = 0
我的isPrime函数已经运行了,我正在尝试将我的isPrime函数用于我的nexttime函数,当我运行这个函数时,我得到了 ">>> 十三,

“(使用13时)

“>>>”(使用14时)


我应该得到17分而不是13分。如果我在function tester中将它改为一个复合数,它将返回到一个无限循环中。请只使用简单的函数(我在代码中使用过的函数)。

我不懂python,但如果它与C类似,那么您就不会给变量赋值,只是测试是否相等

while cnt1 == 1:
    nbr1 == nbr1 + 1
    if isPrime(lst2,nbr1):
        cnt1 == cnt1 + 1
应该成为

while cnt1 == 1:
    nbr1 = nbr1 + 1             << changed here
    if isPrime(lst2,nbr1):
        cnt1 = cnt1 + 1          << and here
当cnt1==1时:

nbr1=nbr1+1这不是正确的方法,但这是我能做的最接近您的代码的改编:

def list_factors_pythonic(number):
    """For a given number, return a list of factors."""
    factors = []
    for x in range(1, number + 1):
        if number % x == 0:
            factors.append(x)
    return factors

def list_factors(number):
    """Alternate list_factors implementation."""
    factors = []
    counter = 1
    while counter <= number:
        if number % counter == 0:
            factors.append(counter)
    return factors  

def is_prime(number):
    """Return true if the number is a prime, else false."""
    return len(list_factors(number)) == 2

def next_prime(number):
    """Return the next prime."""
    next_number = number + 1
    while not is_prime(next_number):
        next_number += 1
    return next_number
def list\u factors\u pythonic(数字):
“”“对于给定的数字,返回因子列表。”“”
因子=[]
对于范围(1,数字+1)内的x:
如果编号%x==0:
因子。追加(x)
回报率
def列表_系数(编号):
“”“备用列表\u因素实施。”“”
因子=[]
计数器=1
而计数器则有助于:

def nextPrime(number):
    for i in range(2,number):
        if number%i == 0:
            return False
        sqr=i*i
        if sqr>number:
           break
    return True

number = int(input("Enter the num: ")) + 1
while(True):
    res=nextPrime(number)
    if res:
        print("The next number number is: ",number)
        break
    number += 1

这段代码是为寻找给定数的下一个素数而优化的。大约需要6.750761032104492秒

def k(x):
   return pow(2,x-1,x)==1
n=int(input())+1
while(1):
    if k(n)==True:
        print(n)
        break
n=n+1

这个代码可以帮助你

n=int(input())
p=n+1
while(p>n):
    c=0
    for i in range(2,p):
        if(p%i==0):
            break
        else:c+=1
    if(c>=p-2):
        print(p)
        break
    p+=1

=
(作业)!=<代码>=
(平等性检查)我们看不到事实列表正在做什么。它应该是在修改lst1吗?它有返回值吗?也许行应该是
lst1=factList(nbr)
,就像我说的,我不懂python,但我怀疑您调用下一个prime时只使用1个参数,而它看起来应该使用2调用。您能提供factList函数吗?(我假设在lst1中返回一个nbr1的因子列表)为了让代码在下一次中更清晰,我将使用一个名为find prime的布尔变量,而不是cnt1=(赋值),而不是==(相等性测试)我将它改为cnt=0,而不是cnt1=cnt1+1,但我看到了>>>13>>>有两个地方你没有分配,所以我尝试了你的方法,我看到了相同的东西>>>13>>,如果我在function tester中将它改为复合数,它将返回无限循环。列表因子已经对我有效,所以我不需要编辑它。你不应该通过作为一个论点是可变的。这是非常糟糕的做法。如果您多次运行该函数,它将继续附加到列表中。请使用它好吗?既然我不能用for和in?(因为这是给学校的)那是不正确的。pow(2,x-1,x)对于复合数也可以等于1。
n=int(input())
p=n+1
while(p>n):
    c=0
    for i in range(2,p):
        if(p%i==0):
            break
        else:c+=1
    if(c>=p-2):
        print(p)
        break
    p+=1