试图找到下一个素数

时间:2014-12-07 23:11:08

标签: 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:
        return True
    else:
        return False





def nextPrime(nbr1):
    cnt1 = 1
    while cnt1 == 1:
        nbr1 == nbr1 + 1
        if isPrime(lst2,nbr1):
            cnt1 = 0

Filetester文件 -

nbr1 = 13 
nextPrime(nbr1)
print nbr1

我的isPrime函数已经可以正常工作了我的isPrime函数用于我的nextPrime函数,当我运行它时我得到了 “&GT;&GT;&GT; 13

  
    
      

“(使用13时)

    
  

“&gt;&gt;&gt;”(使用14时)

我应该得到17而不是13.如果我在功能测试器中将其更改为复合数字,它将返回无限循环。请仅使用简单的函数(我在代码中使用的函数)。

5 个答案:

答案 0 :(得分:2)

这不是正确的方法,但这是我能够做的最接近的代码改编:

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

答案 1 :(得分: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

答案 2 :(得分:0)

我不知道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

答案 3 :(得分:0)

此代码可以帮助您

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

答案 4 :(得分:-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