Codeforces - 1454D - Number into Sequence
★ Today's tune: https://youtu.be/OcpO-cjIKYM
★ Link: https://codeforces.com/problemset/problem/1454/D
★ Tags: math, number theory
★ Difficulty: 1300 (hard to think, easy to implement)
★ Tóm tắt:
Cho số nguyên n (2 <= n <= 10^10). Tìm dãy số nguyên a1, a2, a3, ..., aK sao cho:
- ai > 1 với mọi i;
- a1 * a2 * a3 * ... * aK = n;
- a[i + 1] chia hết cho a[i] với mọi i <= n - 1;
- K lớn nhất có thể (dãy tìm được có độ dài lớn nhất).
★ Nhận xét: dãy tìm được có dạng (p1*a1), (p2*a1), (p3*a1), ... , (pK*a1) (vì a[i + 1] chia hết cho a[i] suy ra a[i] là ước của a[i + 1], hay nói cách khác a[i + 1] = p[i] * a[i]).
★ Ý tưởng: từ nhận xét trên suy ra n có thể viết lại thành dạng: p1 * p2 * p3 * ... * pK * (a1^K) => độ dài dãy lớn nhất khi K lớn nhất => tìm được a1 nhỏ nhất sao cho (p1 * p2 * p3 * ... * pK) cũng chia hết cho a1 và n chia hết cho a1 (gọi số a1 này là base). Khi đó dãy tìm được sẽ có dạng: [a1, a1, a1, ..., (p1 * p2 * p3 * ... * pK)] (K lần a1).
★ Code: https://ideone.com/UsShEa
Comments
Post a Comment