在python中修改for的条件

时间:2012-07-28 12:13:13

标签: python for-loop

嘿,这是一个工作正常的代码。我正在使用更大的代码,程序可以快速回答999999或9999999。

prime=[2,3,5]
f=7
def next_prime(f): #whenever called, measures the next prime of the list and returns it
    j=len(prime)
    while j==len(prime):
        for x in prime:
            if f%x==0:
                f+=2
                break
        else:
            prime.append(f)
    return f

但是如果我稍微修改一下代码(我想添加x应该小于f **的条件.5),程序就没有结果。

prime=[2,3,5]
f=7
main=[]
power=[]
def next_prime(f):
    j=len(prime)
    while j==len(prime):
        for x in prime:
            if (x<int(f**.5)+1) and f%x==0:
                f+=2
                break
        else:
            prime.append(f)
    return f

错误在哪里?

2 个答案:

答案 0 :(得分:2)

这两个版本在我的python解释器(2.7)中运行良好。虽然你的两个版本都不会返回偶数的任何结果,所以你可能应该添加一个检查这个条件:

f=7
main=[]
power=[]
prime = [2,3,5]
def next_prime(f):

    #Added check:
    if not f%2:
        f += 1

    j=len(prime)
    while j==len(prime):
        for x in prime:
            if (x<int(f**.5)+1) and f%x==0:
                f+=2
                break
        else:
            prime.append(f)
    return f

答案 1 :(得分:1)

首先,这些代码甚至不能用于数字。 你应该编写类似的代码。

def next_prime(n):
   assert(n>0)
   while 1:
      n+=1
      if isprime(n):
          return n

如果你可以使用任何isprime()实现。

你可以自己编写或使用着名的miller-rabin算法,只要你有足够的ram来保存计算,它就可以快速适用于任何素数。

http://ideone.com/XO74b