Hôm nay, thầy giáo trên lớp của
đã đưa ra một bài toán với độ khó xấp xỉ 3000 (cụ thể là 800 ) codeforces, với phần thưởng cho người đầu tiên giải được là một cặp vé xem phim. Bài toán có nội dung như sau:Định nghĩa f(i) = \frac{i}{p^{V_p(i)}}. Tính f(1) + f(2) + ... + f(n). Vì kết quả có thể rất lớn nên chỉ cần in ra kết quả đó sau khi chia lấy dư cho 10^9+7.
Do p = 2. Thất vọng, đành tìm đến sự trợ giúp của , người cũng đã có một giải Nhất THTQG, nhưng thật không may, lại không nghiên cứu sâu về toán nên không biết V_p(i) là gì. Bạn có thể giúp giải được bài toán này để giành lấy cặp vé xem phim hay không?
mới học code nên không thể giải được bài toán siêu khủng này. Em liền đưa bài toán này cho , người mà em luôn đối xử trên cả tình bạn, với hy vọng có thể cùng nhau giành được một cặp vé xem phim chung. Tuy nhiên, , người đã có hai giải Nhất THTQG, lại chỉ giải được bài toán này với(Biết rằng: V_p(i), hay lũy thừa của p trong i, được định nghĩa trong bài tập này là số nguyên không âm y lớn nhất không vượt quá 10^{18} sao cho i \vdots p^y. Ví dụ: Ta có V_2(4) = 2 do 4\vdots 2^2 nhưng không chia hết cho 2^3. Do đó f(4) = \frac{4}{2^2} = 1).
Giới hạn: n, p \le 10^{18}.
Input, Output và Subtasks
Input: (KNT.inp
)
- Một dòng duy nhất gồm hai số nguyên dương n và p.
Output: (KNT.out
)
- Một dòng duy nhất là kết quả bài toán.
Subtasks
- Subtask 1 (10\%): n \le 10^6.
- Subtask 2 (10\%): p = 1, n \le 10^9.
- Subtask 3 (10\%): p = 1.
- Subtask 4 (15\%): n \le 10^9.
- Subtask 5 (15\%): trường hợp đặc biệt mà làm được.
- Subtask 6 (20\%): p là số nguyên tố không vượt quá 10^9.
- Subtask 6 (20\%): Không có giói hạn gì thêm.
Sample
Input (KNT.inp
)
5 2
Output (KNT.out
)
11
Notes
- Ta có f(1) = f(2) = f(4) = 1, f(3) = 3, f(5) = 5. Do đó kết quả là 1 + 1 + 3 + 1 + 5 = 11.
Bình luận