[英]Simple prime number generator in Python
有人可以告訴我這段代碼我做錯了什么嗎? 無論如何,它只是打印“計數”。 我只想要一個非常簡單的素數生成器(沒什么花哨的)。
import math
def main():
count = 3
one = 1
while one == 1:
for x in range(2, int(math.sqrt(count) + 1)):
if count % x == 0:
continue
if count % x != 0:
print count
count += 1
有一些問題:
continue
移動到下一個循環迭代 - 但你真的想使用break
停止它這是你的代碼,有一些修復,它只打印出素數:
import math
def main():
count = 3
while True:
isprime = True
for x in range(2, int(math.sqrt(count) + 1)):
if count % x == 0:
isprime = False
break
if isprime:
print count
count += 1
對於更有效的素數生成,請參閱埃拉托色尼篩,正如其他人所建議的那樣。 這是一個很好的優化實現,有很多評論:
# Sieve of Eratosthenes
# Code by David Eppstein, UC Irvine, 28 Feb 2002
# http://code.activestate.com/recipes/117119/
def gen_primes():
""" Generate an infinite sequence of prime numbers.
"""
# Maps composites to primes witnessing their compositeness.
# This is memory efficient, as the sieve is not "run forward"
# indefinitely, but only as long as required by the current
# number being tested.
#
D = {}
# The running integer that's checked for primeness
q = 2
while True:
if q not in D:
# q is a new prime.
# Yield it and mark its first multiple that isn't
# already marked in previous iterations
#
yield q
D[q * q] = [q]
else:
# q is composite. D[q] is the list of primes that
# divide it. Since we've reached q, we no longer
# need it in the map, but we'll mark the next
# multiples of its witnesses to prepare for larger
# numbers
#
for p in D[q]:
D.setdefault(p + q, []).append(p)
del D[q]
q += 1
請注意,它返回一個生成器。
def is_prime(num):
"""Returns True if the number is prime
else False."""
if num == 0 or num == 1:
return False
for x in range(2, num):
if num % x == 0:
return False
else:
return True
>> filter(is_prime, range(1, 20))
[2, 3, 5, 7, 11, 13, 17, 19]
我們將在一個列表中得到所有不超過 20 的質數。 我本可以使用埃拉托色尼篩法,但你說你想要一些非常簡單的東西。 ;)
re 很強大:
import re
def isprime(n):
return re.compile(r'^1?$|^(11+)\1+$').match('1' * n) is None
print [x for x in range(100) if isprime(x)]
###########Output#############
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
def primes(n): # simple sieve of multiples
odds = range(3, n+1, 2)
sieve = set(sum([list(range(q*q, n+1, q+q)) for q in odds], []))
return [2] + [p for p in odds if p not in sieve]
>>> primes(50)
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
測試一個數是否為素數:
>>> 541 in primes(541)
True
>>> 543 in primes(543)
False
print [x for x in range(2,100) if not [t for t in range(2,x) if not x%t]]
這是一個簡單的(Python 2.6.2)解決方案......它符合 OP 的原始請求(現在六個月大); 並且應該是任何“編程 101”課程中完全可以接受的解決方案......因此這篇文章。
import math
def isPrime(n):
for i in range(2, int(math.sqrt(n)+1)):
if n % i == 0:
return False;
return n>1;
print 2
for n in range(3, 50):
if isPrime(n):
print n
這種簡單的“蠻力”方法對於現代 PC 上大約 16,000 的數字“足夠快”(在我的 2GHz 機器上大約需要 8 秒)。
顯然,這可以更有效地完成,通過不重新計算每個偶數的素數,或每個數字的 3、5、7 等的每個倍數......參見Eratosthenes 篩(參見上面 eliben 的實現),如果您感覺特別勇敢和/或瘋狂,甚至可以使用阿特金篩。
警告 Emptor:我是一個蟒蛇菜鳥。 請不要把我說的任何話當成福音。
SymPy是一個用於符號數學的 Python 庫。 它提供了幾個函數來生成素數。
isprime(n) # Test if n is a prime number (True) or not (False).
primerange(a, b) # Generate a list of all prime numbers in the range [a, b).
randprime(a, b) # Return a random prime number in the range [a, b).
primepi(n) # Return the number of prime numbers less than or equal to n.
prime(nth) # Return the nth prime, with the primes indexed as prime(1) = 2. The nth prime is approximately n*log(n) and can never be larger than 2**n.
prevprime(n, ith=1) # Return the largest prime smaller than n
nextprime(n) # Return the ith prime greater than n
sieve.primerange(a, b) # Generate all prime numbers in the range [a, b), implemented as a dynamically growing sieve of Eratosthenes.
這里有些例子。
>>> import sympy
>>>
>>> sympy.isprime(5)
True
>>> list(sympy.primerange(0, 100))
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
>>> sympy.randprime(0, 100)
83
>>> sympy.randprime(0, 100)
41
>>> sympy.prime(3)
5
>>> sympy.prevprime(50)
47
>>> sympy.nextprime(50)
53
>>> list(sympy.sieve.primerange(0, 100))
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
這是一個 numpy 版本的 Eratosthenes 篩法,具有良好的復雜性(低於對長度為 n 的數組進行排序)和矢量化。
import numpy as np
def generate_primes(n):
is_prime = np.ones(n+1,dtype=bool)
is_prime[0:2] = False
for i in range(int(n**0.5)+1):
if is_prime[i]:
is_prime[i*2::i]=False
return np.where(is_prime)[0]
時間:
import time
for i in range(2,10):
timer =time.time()
generate_primes(10**i)
print('n = 10^',i,' time =', round(time.time()-timer,6))
>> n = 10^ 2 time = 5.6e-05
>> n = 10^ 3 time = 6.4e-05
>> n = 10^ 4 time = 0.000114
>> n = 10^ 5 time = 0.000593
>> n = 10^ 6 time = 0.00467
>> n = 10^ 7 time = 0.177758
>> n = 10^ 8 time = 1.701312
>> n = 10^ 9 time = 19.322478
python 3(生成素數)
import math
i = 2
while True:
for x in range(2, int(math.sqrt(i) + 1)):
if i%x==0:
break
else:
print(i)
i += 1
在我看來,最好采用函數式方法,
所以我首先創建一個函數來確定數字是否為素數,然后根據需要在循環或其他地方使用它。
def isprime(n):
for x in range(2,n):
if n%x == 0:
return False
return True
然后運行一個簡單的列表理解或生成器表達式來獲取素數列表,
[x for x in range(1,100) if isprime(x)]
另一個簡單的例子,只考慮奇數的簡單優化。 一切都用惰性流(python 生成器)完成。
用法:primes = list(create_prime_iterator(1, 30))
import math
import itertools
def create_prime_iterator(rfrom, rto):
"""Create iterator of prime numbers in range [rfrom, rto]"""
prefix = [2] if rfrom < 3 and rto > 1 else [] # include 2 if it is in range separately as it is a "weird" case of even prime
odd_rfrom = 3 if rfrom < 3 else make_odd(rfrom) # make rfrom an odd number so that we can skip all even nubers when searching for primes, also skip 1 as a non prime odd number.
odd_numbers = (num for num in xrange(odd_rfrom, rto + 1, 2))
prime_generator = (num for num in odd_numbers if not has_odd_divisor(num))
return itertools.chain(prefix, prime_generator)
def has_odd_divisor(num):
"""Test whether number is evenly divisable by odd divisor."""
maxDivisor = int(math.sqrt(num))
for divisor in xrange(3, maxDivisor + 1, 2):
if num % divisor == 0:
return True
return False
def make_odd(number):
"""Make number odd by adding one to it if it was even, otherwise return it unchanged"""
return number | 1
這是我的實現。 我確定有一種更有效的方法,但似乎有效。 基本標志使用。
def genPrime():
num = 1
prime = False
while True:
# Loop through all numbers up to num
for i in range(2, num+1):
# Check if num has remainder after the modulo of any previous numbers
if num % i == 0:
prime = False
# Num is only prime if no remainder and i is num
if i == num:
prime = True
break
if prime:
yield num
num += 1
else:
num += 1
prime = genPrime()
for _ in range(100):
print(next(prime))
剛剛研究了這個主題,在線程中查找示例並嘗試制作我的版本:
from collections import defaultdict
# from pprint import pprint
import re
def gen_primes(limit=None):
"""Sieve of Eratosthenes"""
not_prime = defaultdict(list)
num = 2
while limit is None or num <= limit:
if num in not_prime:
for prime in not_prime[num]:
not_prime[prime + num].append(prime)
del not_prime[num]
else: # Prime number
yield num
not_prime[num * num] = [num]
# It's amazing to debug it this way:
# pprint([num, dict(not_prime)], width=1)
# input()
num += 1
def is_prime(num):
"""Check if number is prime based on Sieve of Eratosthenes"""
return num > 1 and list(gen_primes(limit=num)).pop() == num
def oneliner_is_prime(num):
"""Simple check if number is prime"""
return num > 1 and not any([num % x == 0 for x in range(2, num)])
def regex_is_prime(num):
return re.compile(r'^1?$|^(11+)\1+$').match('1' * num) is None
def simple_is_prime(num):
"""Simple check if number is prime
More efficient than oneliner_is_prime as it breaks the loop
"""
for x in range(2, num):
if num % x == 0:
return False
return num > 1
def simple_gen_primes(limit=None):
"""Prime number generator based on simple gen"""
num = 2
while limit is None or num <= limit:
if simple_is_prime(num):
yield num
num += 1
if __name__ == "__main__":
less1000primes = list(gen_primes(limit=1000))
assert less1000primes == list(simple_gen_primes(limit=1000))
for num in range(1000):
assert (
(num in less1000primes)
== is_prime(num)
== oneliner_is_prime(num)
== regex_is_prime(num)
== simple_is_prime(num)
)
print("Primes less than 1000:")
print(less1000primes)
from timeit import timeit
print("\nTimeit:")
print(
"gen_primes:",
timeit(
"list(gen_primes(limit=1000))",
setup="from __main__ import gen_primes",
number=1000,
),
)
print(
"simple_gen_primes:",
timeit(
"list(simple_gen_primes(limit=1000))",
setup="from __main__ import simple_gen_primes",
number=1000,
),
)
print(
"is_prime:",
timeit(
"[is_prime(num) for num in range(2, 1000)]",
setup="from __main__ import is_prime",
number=100,
),
)
print(
"oneliner_is_prime:",
timeit(
"[oneliner_is_prime(num) for num in range(2, 1000)]",
setup="from __main__ import oneliner_is_prime",
number=100,
),
)
print(
"regex_is_prime:",
timeit(
"[regex_is_prime(num) for num in range(2, 1000)]",
setup="from __main__ import regex_is_prime",
number=100,
),
)
print(
"simple_is_prime:",
timeit(
"[simple_is_prime(num) for num in range(2, 1000)]",
setup="from __main__ import simple_is_prime",
number=100,
),
)
運行此代碼的結果顯示了有趣的結果:
$ python prime_time.py
Primes less than 1000:
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]
Timeit:
gen_primes: 0.6738066330144648
simple_gen_primes: 4.738092333020177
is_prime: 31.83770858097705
oneliner_is_prime: 3.3708438930043485
regex_is_prime: 8.692703998007346
simple_is_prime: 0.4686249239894096
所以我可以看到我們在這里對不同的問題有正確的答案; 對於素數生成器gen_primes
看起來是正確的答案; 但是對於質數檢查, simple_is_prime
函數更適合。
這有效,但我總是is_prime
接受更好的方法來制作is_prime
函數。
這是我所擁有的:
def is_prime(num):
if num < 2: return False
elif num < 4: return True
elif not num % 2: return False
elif num < 9: return True
elif not num % 3: return False
else:
for n in range(5, int(math.sqrt(num) + 1), 6):
if not num % n:
return False
elif not num % (n + 2):
return False
return True
對於大數,它非常快,因為它只檢查已經是素數的數的除數。
現在,如果要生成素數列表,可以執行以下操作:
# primes up to 'max'
def primes_max(max):
yield 2
for n in range(3, max, 2):
if is_prime(n):
yield n
# the first 'count' primes
def primes_count(count):
counter = 0
num = 3
yield 2
while counter < count:
if is_prime(num):
yield num
counter += 1
num += 2
為了提高效率,可能需要在這里使用生成器。
僅供參考,而不是說:
one = 1
while one == 1:
# do stuff
你可以簡單地說:
while 1:
#do stuff
類似於 user107745,但使用“全部”而不是雙重否定(可讀性更強,但我認為性能相同):
import math
[x for x in xrange(2,10000) if all(x%t for t in xrange(2,int(math.sqrt(x))+1))]
基本上它迭代 (2, 100) 范圍內的 x 並只選擇那些沒有 mod == 0 的范圍內的所有 t (2,x)
另一種方法可能只是在我們進行時填充素數:
primes = set()
def isPrime(x):
if x in primes:
return x
for i in primes:
if not x % i:
return None
else:
primes.add(x)
return x
filter(isPrime, range(2,10000))
import time
maxnum=input("You want the prime number of 1 through....")
n=2
prime=[]
start=time.time()
while n<=maxnum:
d=2.0
pr=True
cntr=0
while d<n**.5:
if n%d==0:
pr=False
else:
break
d=d+1
if cntr==0:
prime.append(n)
#print n
n=n+1
print "Total time:",time.time()-start
如果你想找到一個范圍內的所有質數,你可以這樣做:
def is_prime(num):
"""Returns True if the number is prime
else False."""
if num == 0 or num == 1:
return False
for x in range(2, num):
if num % x == 0:
return False
else:
return True
num = 0
itr = 0
tot = ''
while itr <= 100:
itr = itr + 1
num = num + 1
if is_prime(num) == True:
print(num)
tot = tot + ' ' + str(num)
print(tot)
只需添加while its <=
和您的范圍編號。
輸出:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101
這似乎是家庭作業,所以我會給出一個提示而不是詳細的解釋。 如果我假設錯誤,請糾正我。
當你看到一個偶數除數時,你做得很好。
但是,只要您看到一個不能整除的數字,就會立即打印“計數”。 例如,2 不能整除為 9。但這並不能使 9 成為質數。 您可能希望繼續下去,直到您確定范圍內沒有數字匹配為止。
(正如其他人所回答的那樣,Sieve 是一種更有效的方法……只是想幫助您了解為什么此特定代碼沒有按照您的意願行事)
您需要確保所有可能的除數不會平均划分您正在檢查的數字。 在這種情況下,只要其中一個可能的除數不能均勻地整除該數字,您就可以隨時打印正在檢查的數字。
此外,您不想使用 continue 語句,因為當您已經發現該數字不是素數時, continue 只會導致它檢查下一個可能的除數。
使用發電機:
def primes(num):
if 2 <= num:
yield 2
for i in range(3, num + 1, 2):
if all(i % x != 0 for x in range(3, int(math.sqrt(i) + 1))):
yield i
用法:
for i in primes(10):
print(i)
2、3、5、7
您可以以相當優雅的方式使用列表推導式創建素數列表。 取自這里:
>>> noprimes = [j for i in range(2, 8) for j in range(i*2, 50, i)]
>>> primes = [x for x in range(2, 50) if x not in noprimes]
>>> print primes
>>> [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
這是我見過的找到 n 以內的素數的最快方法。 在 1.2 秒內達到 100m。 它使用純 python 沒有依賴
def primes(lim):
if lim<7:
if lim<2: return []
if lim<3: return [2]
if lim<5: return [2, 3]
return [2, 3, 5]
n = (lim-1)//30
m = n+1
BA = bytearray
prime1 = BA([1])*m
prime7 = BA([1])*m
prime11 = BA([1])*m
prime13 = BA([1])*m
prime17 = BA([1])*m
prime19 = BA([1])*m
prime23 = BA([1])*m
prime29 = BA([1])*m
prime1[0] = 0
i = 0
try:
while 1:
if prime1[i]:
p = 30*i+1
l = i*(p+1)
prime1[l::p] = BA(1+(n-l)//p)
l += i*6
prime7[l::p] = BA(1+(n-l)//p)
l += i*4
prime11[l::p] = BA(1+(n-l)//p)
l += i*2
prime13[l::p] = BA(1+(n-l)//p)
l += i*4
prime17[l::p] = BA(1+(n-l)//p)
l += i*2
prime19[l::p] = BA(1+(n-l)//p)
l += i*4
prime23[l::p] = BA(1+(n-l)//p)
l += i*6
prime29[l::p] = BA(1+(n-l)//p)
if prime7[i]:
p = 30*i+7
l = i*(p+7)+1
prime19[l::p] = BA(1+(n-l)//p)
l += i*4+1
prime17[l::p] = BA(1+(n-l)//p)
l += i*2+1
prime1[l::p] = BA(1+(n-l)//p)
l += i*4
prime29[l::p] = BA(1+(n-l)//p)
l += i*2+1
prime13[l::p] = BA(1+(n-l)//p)
l += i*4+1
prime11[l::p] = BA(1+(n-l)//p)
l += i*6+1
prime23[l::p] = BA(1+(n-l)//p)
l += i*2+1
prime7[l::p] = BA(1+(n-l)//p)
if prime11[i]:
p = 30*i+11
l = i*(p+11)+4
prime1[l::p] = BA(1+(n-l)//p)
l += i*2
prime23[l::p] = BA(1+(n-l)//p)
l += i*4+2
prime7[l::p] = BA(1+(n-l)//p)
l += i*2
prime29[l::p] = BA(1+(n-l)//p)
l += i*4+2
prime13[l::p] = BA(1+(n-l)//p)
l += i*6+2
prime19[l::p] = BA(1+(n-l)//p)
l += i*2+1
prime11[l::p] = BA(1+(n-l)//p)
l += i*6+2
prime17[l::p] = BA(1+(n-l)//p)
if prime13[i]:
p = 30*i+13
l = i*(p+13)+5
prime19[l::p] = BA(1+(n-l)//p)
l += i*4+2
prime11[l::p] = BA(1+(n-l)//p)
l += i*2+1
prime7[l::p] = BA(1+(n-l)//p)
l += i*4+1
prime29[l::p] = BA(1+(n-l)//p)
l += i*6+3
prime17[l::p] = BA(1+(n-l)//p)
l += i*2+1
prime13[l::p] = BA(1+(n-l)//p)
l += i*6+3
prime1[l::p] = BA(1+(n-l)//p)
l += i*4+1
prime23[l::p] = BA(1+(n-l)//p)
if prime17[i]:
p = 30*i+17
l = i*(p+17)+9
prime19[l::p] = BA(1+(n-l)//p)
l += i*2+1
prime23[l::p] = BA(1+(n-l)//p)
l += i*4+3
prime1[l::p] = BA(1+(n-l)//p)
l += i*6+3
prime13[l::p] = BA(1+(n-l)//p)
l += i*2+1
prime17[l::p] = BA(1+(n-l)//p)
l += i*6+3
prime29[l::p] = BA(1+(n-l)//p)
l += i*4+3
prime7[l::p] = BA(1+(n-l)//p)
l += i*2+1
prime11[l::p] = BA(1+(n-l)//p)
if prime19[i]:
p = 30*i+19
l = i*(p+19)+12
prime1[l::p] = BA(1+(n-l)//p)
l += i*4+2
prime17[l::p] = BA(1+(n-l)//p)
l += i*6+4
prime11[l::p] = BA(1+(n-l)//p)
l += i*2+1
prime19[l::p] = BA(1+(n-l)//p)
l += i*6+4
prime13[l::p] = BA(1+(n-l)//p)
l += i*4+2
prime29[l::p] = BA(1+(n-l)//p)
l += i*2+2
prime7[l::p] = BA(1+(n-l)//p)
l += i*4+2
prime23[l::p] = BA(1+(n-l)//p)
if prime23[i]:
p = 30*i+23
l = i*(p+23)+17
prime19[l::p] = BA(1+(n-l)//p)
l += i*6+5
prime7[l::p] = BA(1+(n-l)//p)
l += i*2+1
prime23[l::p] = BA(1+(n-l)//p)
l += i*6+5
prime11[l::p] = BA(1+(n-l)//p)
l += i*4+3
prime13[l::p] = BA(1+(n-l)//p)
l += i*2+1
prime29[l::p] = BA(1+(n-l)//p)
l += i*4+4
prime1[l::p] = BA(1+(n-l)//p)
l += i*2+1
prime17[l::p] = BA(1+(n-l)//p)
if prime29[i]:
p = 30*i+29
l = i*(p+29)+28
prime1[l::p] = BA(1+(n-l)//p)
l += i*2+1
prime29[l::p] = BA(1+(n-l)//p)
l += i*6+6
prime23[l::p] = BA(1+(n-l)//p)
l += i*4+4
prime19[l::p] = BA(1+(n-l)//p)
l += i*2+2
prime17[l::p] = BA(1+(n-l)//p)
l += i*4+4
prime13[l::p] = BA(1+(n-l)//p)
l += i*2+2
prime11[l::p] = BA(1+(n-l)//p)
l += i*4+4
prime7[l::p] = BA(1+(n-l)//p)
i+=1
except:
pass
RES = [2, 3, 5]
A = RES.append
ti=0
try:
for i in range(n):
if prime1[i]:
A(ti+1)
if prime7[i]:
A(ti+7)
if prime11[i]:
A(ti+11)
if prime13[i]:
A(ti+13)
if prime17[i]:
A(ti+17)
if prime19[i]:
A(ti+19)
if prime23[i]:
A(ti+23)
if prime29[i]:
A(ti+29)
ti+=30
except:
pass
if prime1[n] and (30*n+1)<=lim:
A(30*n+1)
if prime7[n] and (30*n+7)<=lim:
A(30*n+7)
if prime11[n] and (30*n+11)<=lim:
A(30*n+11)
if prime13[n] and (30*n+13)<=lim:
A(30*n+13)
if prime17[n] and (30*n+17)<=lim:
A(30*n+17)
if prime19[n] and (30*n+19)<=lim:
A(30*n+19)
if prime23[n] and (30*n+23)<=lim:
A(30*n+23)
if prime29[n] and (30*n+29)<=lim:
A(30*n+29)
return RES
from time import time
n = time()
print (primes(100000000)[-1])
print (time() - n)
如果你想直接計算素數怎么辦:
def oprime(n):
counter = 0
b = 1
if n == 1:
print 2
while counter < n-1:
b = b + 2
for a in range(2,b):
if b % a == 0:
break
else:
counter = counter + 1
if counter == n-1:
print b
def genPrimes():
primes = [] # primes generated so far
last = 1 # last number tried
while True:
last += 1
for p in primes:
if last % p == 0:
break
else:
primes.append(last)
yield last
對我來說,以下解決方案看起來簡單且易於遵循。
import math
def is_prime(num):
if num < 2:
return False
for i in range(2, int(math.sqrt(num) + 1)):
if num % i == 0:
return False
return True
def check_prime(x):
if (x < 2):
return 0
elif (x == 2):
return 1
t = range(x)
for i in t[2:]:
if (x % i == 0):
return 0
return 1
continue 語句看起來是錯誤的。
你想從 2 開始,因為 2 是第一個質數。
您可以編寫“while True:”以獲得無限循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.