簡體   English   中英

Python素數代碼

[英]Python prime number code

我正在嘗試生成3之后的第一個“ n”素數。問題是我不知道我的代碼出了什么問題,如果有人可以幫助我解決邏輯問題,我將不勝感激。

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

任何有關幫助我解決此問題的指導將不勝感激。 我通讀了有關該問題的舊文章,但想知道我自己的邏輯在哪些地方存在缺陷。

謝謝。

我認為您在這里遇到幾個問題。

關於其他,您的縮進是錯誤的。

另外,嘗試更改循環中使用的變量名稱,以不使用腳本頂部定義的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

休息后添加其他內容也可以幫助您調試此類問題。

首先,您應該檢查縮進。 我想這是你的代碼:

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開頭。 然后,如果它是奇數,請檢查是否有小於它的整數可以除。

有更好的算法可以做到這一點。 檢查一下

這是一些代碼:

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]
    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)

顯然不是最有效的。 希望它可以有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM