วิธีที่เร็วที่สุดในการแสดงรายการช่วงเวลาทั้งหมดที่ต่ำกว่า N
นี่เป็นอัลกอริธึมที่ดีที่สุดที่ฉันสามารถทำได้ def get_primes(n): numbers = set(range(n, 1, -1)) primes = [] while numbers: p = numbers.pop() primes.append(p) numbers.difference_update(set(range(p*2, n+1, p))) return primes >>> timeit.Timer(stmt='get_primes.get_primes(1000000)', setup='import get_primes').timeit(1) 1.1499958793645562 มันสามารถทำให้เร็วขึ้นได้หรือไม่ รหัสนี้มีข้อบกพร่อง: เนื่องจากnumbersเป็นชุดที่ไม่มีการเรียงลำดับจึงไม่มีการรับประกันที่numbers.pop()จะลบหมายเลขต่ำสุดออกจากชุด อย่างไรก็ตามมันใช้งานได้ (อย่างน้อยสำหรับฉัน) สำหรับตัวเลขที่ป้อน: >>> sum(get_primes(2000000)) 142913828922L #That's the correct sum of all numbers below 2 million >>> 529 in get_primes(1000) …