[英]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.