簡體   English   中英

如何在python中找到素數?

[英]How to find the prime numbers in python?

我是python的初學者。 但是我不明白為什么我仍然會出錯。 我過去在MATLAB中工作,現在我需要為實習學習python。 有人可以幫我解決這個問題嗎?

下面是我的代碼以查找質數

def prime_number(num):
    myprime = []
    for x in range(2,num):
        prime = True
        if x == 2:
            myprime.append(x)
        else:
            for y in prime:
                if x%y == 0:
                    prime = False
                    break;
            if prime:
                myprime.append(x)

    return myprime

這是我的錯誤:

TypeError                                 Traceback (most recent call last)
<ipython-input-87-cd2bf40e6117> in <module>
----> 1 prime_number(100)

<ipython-input-86-169e0a64e50a> in prime_number(num)
     13         else:
     14 
---> 15             for y in prime:
     16 
     17                 if x%y == 0:

TypeError: 'bool' object is not iterable

您還能告訴我如何解決縮進問題,或了解有關python中縮進的更多信息。 我知道python中的標識非常重要。 我正在使用python 3版本。

在一些幫助下更正=)

   def prime_number(num):
    myprime = []
    for x in range(1, num):
        if x == 2:
            myprime.append(x)
            continue
        prime = True
        for y in myprime:
            if y <= 1:
                continue
            if x <= 2:
                continue
            if x%y == 0:
                prime = False
                continue
        if prime:
            myprime.append(x)
    return myprime

您將自己與過於簡短的變量混淆了。 去過也做過 ...

        for y in prime:

應該

        for y in myprime:

您想遍歷已經找到的素數列表。 我建議對變量名進行全局更改:

prime => is_prime
my_prime => prime_list

學習編程時,您將學習自己的命名風格。

對於一般的算法,如果您在瀏覽器中搜索“ Python find primes”,那么您會找到比我們這里可以更好地解釋這一點的參考。

這可能有點先進,但這是我最喜歡的簡潔,代碼清晰和n小於10億的速度的組合。 除此之外,C ++是您的朋友。

感謝@Robert William Hanks出色的篩分功能。 只有底部的驅動程序代碼是我的。

#!/usr/bin/python -Wall
import sys
def rwh_primes1(n):
    # https://stackoverflow.com/questions/2068372/fastest-way-to-list-all-primes- 
    #     below-n-in-python/3035188#3035188
    """ Returns  a list of primes < n """
    sieve = [True] * (n/2)
    for i in xrange(3,int(n**0.5)+1,2):
        if sieve[i/2]:
            sieve[i*i/2::i] = [False] * ((n-i*i-1)/(2*i)+1)
    return [2] + [2*i+1 for i in xrange(1,n/2) if sieve[i]]

if len(sys.argv) > 1:
    N = int(float(sys.argv[1]))
else:
    N = 10000000    # default: 1e7 10,000,000

p = rwh_primes1(N)
print len(p), "primes found <", N
if N < 1000:
    print p

暫無
暫無

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

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