Hướng dẫn giải của Free Contest 140 - NMPRODUCT

Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người làm lời giải.


Nộp code mẫu trước khi tự giải được bài tập là một hành vi có thể bị ban.

Tác giả: dinhwe2612

Để tạo được dãy ~n~ số có tích là ~m~ ta có thể hình dung dãy ~n~ số ban đầu gồm toàn số ~1~ và ~m~ có dạng ~m = a_{1}^{x_{1}} \times a_{2}^{x_{2}} \times ... \times a_{k}^{x_{k}}~ (với ~a_{i}~ là số nguyên tố).

Với mỗi ~i~, ta cần chọn ~x_{i}~ vị trí trong ~n~ vị trí của dãy ban đầu (vị trí có thể trùng nhau) để nhân với ~a_{i}~. Như vậy số cách chọn là tổ hợp lặp chập ~x_{i}~ của ~n~ phần tử: ~C^{x_{i}}_{n + x_{i} - 1}~.

Tính tổ hợp chuẩn bị không quá ~O(n + \log_{2}(m))~ và truy vấn ~O(1)~ bằng nghịch đảo modulo.

DPT: ~O(n + \log_{2}(m) + \sqrt{m})~.


Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.