Từ Wikipedia:Thời gian phức tạp của Sieve of Eratosthenes thuật toán
Sự phức tạp của thuật toán là
O(n(logn)(loglogn))
hoạt động bit.
Làm thế nào để bạn đến nơi đó?
Điều phức tạp bao gồm cụm từ loglogn
cho tôi biết rằng có một số sqrt(n)
ở đâu đó.
Giả sử tôi đang chạy sàng trên 100 số đầu tiên (n = 100
), giả định rằng đánh dấu những con số như tổng hợp cần có thời gian liên tục (thực hiện mảng), số lần chúng tôi sử dụng mark_composite()
sẽ là một cái gì đó giống như
n/2 + n/3 + n/5 + n/7 + ... + n/97 = O(n^2)
Và để tìm ra số nguyên tố tiếp theo (ví dụ để chuyển đến 7
sau khi vượt ra ngoài tất cả những con số mà là bội số của 5
), số lượng các hoạt động sẽ là O(n)
.
Vì vậy, độ phức tạp sẽ là O(n^3)
. Bạn có đồng ý không?
Tôi không biết về phần còn lại (quá mathy cho đúng não quá buồn ngủ của tôi bây giờ), nhưng căn bậc hai xuất phát từ thực tế là nếu một số không có ước số ít hơn căn bậc hai của nó, nó là số nguyên tố. Ngoài ra, tôi chỉ biết rằng loglog (n) có nghĩa là có một căn bậc hai. Tốt đẹp. –
Làm thế nào để loglog (n) có nghĩa là có một sqrt (n) ở đâu đó? (@Martinho: Tại sao bạn lại nói bạn "vừa mới học được điều này"?) Phân tích thực tế không liên quan đến bất kỳ căn bậc hai nào! – ShreevatsaR