我想找到給定數字之前的所有PRIME數字,并將它們分別添加到它們的串列中。
數字“100”有 25 個素數,而我得到 1060。我做錯了什么?
!pip install sympy
import sympy
def count_primes(num):
primes = 0
nonprimes = 0
for x in range(0, num):
if sympy.isprime(x) == True:
primes = primes x
else:
nonprimes = nonprimes x
return primes
uj5u.com熱心網友回復:
似乎您正在混合素數串列和計數。您可以通過定義將所有素數和非素數添加到串列中
primes, nonprimes = [],[]
并保持其他一切不變。這將只回傳素數串列。
如果要計算 0 到 100 之間的素數,可以將 if 和 else 陳述句中的代碼更改為
primes =1
和
nonprimes =1
您將回傳 0 到 100 之間的素數。
uj5u.com熱心網友回復:
當數字為素數時,您在“素數”中添加“x”,而不是將“素數”值增加 1
uj5u.com熱心網友回復:
您可以使用這個 sympy.primerange() 函式來獲取所有素數的串列,并使用 len() 來獲取該數字的素數總數
def count_primes(num):
primes = list(sympy.primerange(0, num))
length = len(primes)
return length
print(count_primes(100)) #25
uj5u.com熱心網友回復:
問題在于:
if sympy.isprime(x) == True:
primes = primes x
else:
nonprimes = nonprimes x
上面,當你在做primes = primes x你所說的是你想要將x(素數)的值添加到變數primes。因此發生了什么,當您使用 100 作為您的函式時,您num的函式將回傳 1060,因為這是不超過 100 的所有素數的總和。
首先,如果您想知道素數的總數達到某個數字,您可以使用以下方法:
#define a variable to track the total number of primes
primeTotal = 0
#using the if statement from before
if sympy.isprime(x) == True:
primeTotal = 1
現在所做的是,對于素數的每個實體,您將在素數的計數上加 1。
要創建素數串列,您必須首先定義一個串列,然后將素數添加到該串列中。同樣,使用之前的 if 陳述句:
#defining the list
primeNums = []
if sympy.isprime(x) == True:
primeNums.append(x)
現在發生的事情是,對于素數x(素數)的每個實體都被添加(附加)到串列中primeNums。這應該可以解決您的兩個問題。
最后一段代碼看起來像這樣:
import sympy
def count_primes(num):
primesTotal = 0
primeNums = []
for x in range(0, num):
if sympy.isprime(x) == True:
primesTotal = 1
primeNums.append(x)
return primesTotal, primeNums
print(primesTotal, primeNums)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/427443.html
標籤:Python python-3.x
下一篇:for回圈中的字串洗掉
