Python素数代码

时间:2014-09-25 19:56:35

标签: python

我正在尝试生成第一个" n" 3之后的素数。问题是我不明白我的代码出错的地方,如果有人可以帮我解释逻辑,我会很感激。

a = 3
b = 2

# n = number of prime numbers to be printed.
n = 1000

for a in range(a, n):   #This i the range of all numbers to be tested
    if a % 2 == 0:      #Only odd numbers are prime(except 2) so eliminate the evens
        print "."
else:
    for b in range(b, a):  #This is to test the odd numbers
        if (a % b == 0):   #I am dividing  a by all numbers smaller than it to test
            print a, "is not prime"
            break

非常感谢任何帮助我解决这个问题的指导。我在这个问题上阅读了较旧的帖子,但想看看我自己的逻辑在哪里有缺陷。

感谢。

4 个答案:

答案 0 :(得分:0)

我认为你在这里有几个问题。

对于其他人,你的缩进是错误的。

另外,尝试更改循环中使用的变量名称,以便不使用脚本顶部定义的a和b,您应该看到差异。

应该是:

a = 3
b = 2

n = 1000

for ax in range(a, n):   
   if ax % 2 == 0:
       print "."
   else:
       for bx in range(b, ax): 
            if (ax % bx == 0):   
                print ax, "is not prime"
                break

休息后添加其他其他内容也可以帮助您调试此类问题。

答案 1 :(得分:0)

首先你应该检查缩进。我猜这是你的代码:

for a in range(a, n):   #This i the range of all numbers to be tested
    if a % 2 == 0:      #Only odd numbers are prime(except 2) so eliminate the evens
        print "."
    else:
        for b in range(b, a):  #This is to test the odd numbers
            if (a % b == 0):   #I am dividing  a by all numbers smaller than it to test
                print a, "is not prime"
                break

这段代码对我有意义。你也需要修复第一个印刷品。

    if a % 2 == 0:      #Only odd numbers are prime(except 2) so eliminate the evens
        print a, "is not prime"

现在让我们看看逻辑。如果a是偶数,那么它不是素数,你不能以a = 2开头。然后,如果它是奇数,检查是否有任何数字可以除以它。

有更好的算法来做到这一点。检查this

答案 2 :(得分:0)

这里有一些代码:

import math
import itertools

def isprime(m):
    return not any((m % d == 0 for d in range(2, int(math.sqrt(m)+1))))

def genprimes(n):
    i = 0
    for m in itertools.count(2):  # 2, 3, 4, ... 
        if i >= n:
            return
        if isprime(m):
            yield m
            i += 1

运行

list(genprimes(10))

产生

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

答案 3 :(得分:0)

    n = 1000
    primes = []
    nonprime = []

    def prime(nonprime, primes, n):
        nonprime.append(0)
        nonprime.append(1)
        nonprime.append(2)
        primes.append(3)
        for number in range(3, n):
            if (number % 2 == 0):
                nonprime.append(number)
            else:
                counter = 3
                while counter <= number:
                    if (counter != number) and (number % counter == 0):
                        nonprime.append(number)
                        break
                    elif (number % counter == 1) and (counter >= number/2):
                        primes.append(number)
                        break
                    else:
                        counter += 1

        print "primes are : ", primes
        print "nonprimes are : ", nonprime

    if __name__ == "__main__":
        prime(nonprime, primes, n)

显然不是最有效率的。希望它能以某种方式提供帮助。