Để tham khảo, có một sự khác biệt về tốc độ khá đáng kể giữa các giải pháp đã nêu khác nhau. Đây là một số mã so sánh. Giải pháp được chỉ ra bởi Lennart được gọi là "lịch sử", giải pháp được đề xuất bởi kiến được gọi là "ngây thơ", và một của RC được gọi là "regexp". from sys import argv
from time import time
def prime(i, primes):
for prime in primes:
if not (i == prime or i % prime):
return False
primes.add(i)
return i
def historic(n):
primes = set([2])
i, p = 2, 0
while True:
if prime(i, primes):
p += 1
if p == n:
return primes
i += 1
def naive(n):
from itertools import count, islice
primes = (n for n in count(2) if all(n % d for d in range(2, n)))
return islice(primes, 0, n)
def isPrime(n):
import re
# see http://tinyurl.com/3dbhjv
return re.match(r'^1?$|^(11+?)\1+$', '1' * n) == None
def regexp(n):
import sys
N = int(sys.argv[1]) # number of primes wanted (from command-line)
M = 100 # upper-bound of search space
l = list() # result list
while len(l) < N:
l += filter(isPrime, range(M - 100, M)) # append prime element of [M - 100, M] to l
M += 100 # increment upper-bound
return l[:N] # print result list limited to N elements
def dotime(func, n):
print func.__name__
start = time()
print sorted(list(func(n)))
print 'Time in seconds: ' + str(time() - start)
if __name__ == "__main__":
for func in naive, historic, regexp:
dotime(func, int(argv[1]))
Đầu ra của điều này trên máy của tôi cho n = 100 là: naive
[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]
Time in seconds: 0.0219371318817
historic
[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]
Time in seconds: 0.00515413284302
regexp
[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]
Time in seconds: 0.0733318328857
Như bạn có thể thấy, có một sự khác biệt khá lớn. Đây là một lần nữa cho 1000 (đã bị xóa đầu ra chính): naive
Time in seconds: 1.49018788338
historic
Time in seconds: 0.148319005966
regexp
Time in seconds: 29.2350409031
0 như 0 không thích like
0 dislike Quan điểm 121K views Đã hỏi ngày 29 tháng 2 năm 2020in RGPV/UTMP B.Tech (CSE-V SEM) Chuyên gia của Python Labbyankit Yadavgoeduhub (5,8k điểm)Feb 29, 2020 in RGPV/UTMP B.Tech (CSE-V Sem) Python Lab by
Ankit Yadav Goeduhub's Expert (5.8k points) Chương trình Python để tìm số n số đầu tiên - rgpv-python-lab
- utmp-python-lab
- rajiv-gandhi-prodyogic-viswvidyalya-python-lab
- rgpv-python-lab-experiments
- rgpv-python-lab-experiment10
Chia sẻ với bạn bè của bạn 0 như 0 không thích Answer0 như 0 không thích like
0 dislike Quan điểm 121KFeb 29, 2020 by Ankit Yadav Goeduhub's Expert (5.8k
points) edited Apr 27, 2020 by Ankit Yadav Đã hỏi ngày 29 tháng 2 năm 2020in RGPV/UTMP B.Tech (CSE-V SEM) Chuyên gia của Python Labbyankit Yadavgoeduhub (5,8k điểm) Chương trình Python để tìm số n số đầu tiên
1 câu trả lời Đã trả lời ngày 29 tháng 2 năm 2020Byankit Yadavgoeduhub (5,8k điểm) EditedApr 27, 2020by Ankit Yadav Câu trả lời hay nhất Mã chương trình numr = int (input ("enter range:")) print ("Số nguyên tố:", end = '') cho n trong phạm vi (1, numr): & nbsp; & nbsp; Đối với tôi trong phạm vi (2, n): |
---|
& nbsp; & nbsp; & nbsp; & nbsp; if (n%i == 0):
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; phá vỡ Prime numbers: 1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 |
---|
& nbsp; & nbsp; khác: Click here
Học và cải thiện các kỹ năng dữ liệu theo yêu cầu trực tuyến trong mùa hè này với & NBSP; Các khóa học chất lượng cao này [được đề xuất bởi Goeduhub]:-[Recommended by GOEDUHUB]:- Các khóa học trực tuyến khoa học dữ liệu tốt nhất [Danh sách] trên:- Yêu cầu thử nghiệm miễn phí 10 ngày của bạn cho Pluralsight.
Các khóa học khoa học dữ liệu tốt nhất trên DatacampDatacamp
| Các khóa học khoa học dữ liệu tốt nhất về CourseraCoursera
| Các khóa học khoa học dữ liệu tốt nhất về UDEMYUdemy
| Các khóa học khoa học dữ liệu tốt nhất về PluralsightPluralsight
| Các khóa học khoa học dữ liệu tốt nhất & microdegrees về tính UdacityUdacity
| Trí tuệ nhân tạo tốt nhất [AI] các khóa học về CourseraCoursera
| Các khóa học về máy học tốt nhất [ML] trên CourseraCoursera
| Các khóa học lập trình Python tốt nhất về CourseraCoursera
| Trí tuệ nhân tạo tốt nhất [AI]Udemy
| Các khóa học lập trình Python tốt nhất về UDEMYUdemy
|
Chia sẻ với bạn bè của bạn |