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

Popular posts from this blog

Codeforces - 1433D - Districts Connection

Codeforces - 1462E2 - Close Tuples (hard version)

Kadane's algorithm - Finding maximum rectangular submatrix