Hướng dẫn sum of sequence c++ - tổng của chuỗi c ++
Làm thế nào tôi có thể tổng hợp trình tự sau:
Đây chỉ đơn giản là giải pháp O (n) trên C ++:
Bạn có biết bất kỳ giải pháp nào tốt hơn thế này không? Ý tôi là O (1) hoặc O (log (n)). Cảm ơn bạn đã dành thời gian :) và giải pháp Chỉnh sửa: Cảm ơn bạn cho tất cả các câu trả lời của bạn. Nếu ai đó muốn giải pháp o (sqrt (n)): python:
C ++:
Đã hỏi ngày 4 tháng 1 năm 2015 lúc 18:04Jan 4, 2015 at 18:04
4 Đây là hàm tổng kết giảm của Dirichlet D (x). Sử dụng công thức sau (nguồn) ở đâu đưa ra mã psuedo
Notes:
Đã trả lời ngày 4 tháng 1 năm 2015 lúc 18:29Jan 4, 2015 at 18:29
NPENPENPE 473K104 Huy hiệu vàng928 Huy hiệu bạc1001 Huy hiệu đồng104 gold badges928 silver badges1001 bronze badges 4 Lấy từ bài viết Wikipedia về chức năng tổng kết của Divisor, ở đâu . Điều đó sẽ cung cấp một giải pháp thời gian. EDIT: Bài toán căn bậc hai cũng có thể được giải quyết ở căn bậc hai hoặc thậm chí thời gian logarit quá - chỉ trong trường hợp không rõ ràng. Đã trả lời ngày 4 tháng 1 năm 2015 lúc 18:20Jan 4, 2015 at 18:20
AlecalecAlec 31.2K5 Huy hiệu vàng62 Huy hiệu bạc114 Huy hiệu đồng5 gold badges62 silver badges114 bronze badges 0 Dự án polymath phác thảo một thuật toán để tính toán hàm này trong thời gian o (n^(1/3 + o (1))), xem Phần 2.1 trên các trang 8-9 của: http://arxiv.org/abs/1009.3956 Thuật toán liên quan đến việc cắt vùng thành các khoảng đủ mỏng và ước tính giá trị trên mỗi khoảng, trong đó các khoảng được chọn đủ mỏng để ước tính sẽ chính xác khi được làm tròn đến số nguyên gần nhất. Vì vậy, bạn tính toán trực tiếp lên đến một số phạm vi (họ đề xuất 100n^(1/3) nhưng bạn có thể sửa đổi điều này một cách cẩn thận) và sau đó thực hiện phần còn lại trong các lát mỏng này. Xem mục OEIS để biết thêm thông tin về chuỗi này. EDIT: Bây giờ tôi thấy Kerrek SB đề cập đến thuật toán này trong các bình luận. Tuy nhiên, một cách công bằng, tôi đã thêm nhận xét vào OEIS 5 năm trước vì vậy tôi không cảm thấy tồi tệ khi đăng câu trả lời 'của anh ấy. :) Tôi cũng nên đề cập rằng không thể có thuật toán O (1), vì câu trả lời là xung quanh n log n và do đó viết nó ra cũng cần có thời gian> log n. Đã trả lời ngày 4 tháng 1 năm 2015 lúc 19:03Jan 4, 2015 at 19:03
CharlescharlesCharles 11K13 Huy hiệu vàng64 Huy hiệu bạc100 Huy hiệu đồng13 gold badges64 silver badges100 bronze badges 2 Hãy chia tất cả số 1, hơn 2. Đó là lý do tại sao chúng ta có thể lặp lại giá trị của 3 (từ 4 đến sqrt(n) ) và tính toán số lượng 6 đó 3. Nó có thể được tìm thấy trong 8 cho một 9 cố định bằng cách sử dụng thực tế là 3 có nghĩa là 1, cho 2.Các nhóm thứ nhất và thứ hai được xử lý trong Đã trả lời ngày 4 tháng 1 năm 2015 lúc 18:21Jan 4, 2015 at 18:21
Krasnkevichkraskevichkraskevich 18.2K4 Huy hiệu vàng32 Huy hiệu bạc44 Huy hiệu đồng4 gold badges32 silver badges44 bronze badges 0 Đối với 5 lớn, hãy sử dụng công thức:ở đâu (là một số siêu việt.) Xem bài viết liên tục Euler-Mascheroni để biết thêm thông tin.
Đã trả lời ngày 4 tháng 1 năm 2015 lúc 18:12Jan 4, 2015 at 18:12
Danny Daglasdanny DaglasDanny Daglas 1.5011 huy hiệu vàng9 Huy hiệu bạc9 Huy hiệu đồng1 gold badge9 silver badges9 bronze badges 7 Bạn có thể nhận thấy rằng có các giá trị duy nhất O (n^(1/2)) trong tập s = {⌊n/1⌋, ⌊n/2⌋, ..., ⌊n/(n-1) ⌋, ⌊N/n⌋}. Do đó, bạn có thể tính toán hàm trong O (n^(1/2)) Ngoài ra vì hàm này không đối xứng, bạn thậm chí có thể tính toán x2 nhanh hơn bằng cách sử dụng công thức này: d (n) = σ (x = 1-> u) (⌊n/x⌋) - u^2 cho u = ⌊n^( 1/2) Thậm chí phức tạp hơn nhưng nhanh hơn: Sử dụng phương pháp mà Richard Sladkey mô tả trong bài viết này, bạn có thể tính toán hàm trong O (n^(1/3)) Đã trả lời ngày 26 tháng 8 năm 2021 lúc 20:22Aug 26, 2021 at 20:22
1 |