1. 程式人生 > >codeforces 703E Mishka and Divisors

codeforces 703E Mishka and Divisors

gcd 過程 處理 元素 大小 多次 -a 超時 可能

codeforces 703E Mishka and Divisors

題面

給出大小為\(1000\)的數組和一個數\(k\),求長度最短的一個子序列使得子序列的元素之積是\(k\)的倍數,如果有多個解輸出元素和最小的序列。
\(k\)和數組元素的數量級都是\(1e12\)

題解

\(f[i][d]\)表示前\(i\)項是\(d\)的倍數的最優解。因為\(d\)只可能是\(k\)的因數,所以離散化一下\(k\)的因數即可。
過程中需要多次求\(gcd\),直接求會超時。需要先預處理\(b[i]=gcd(a[i], k)\),那麽\(gcd(a[i], k/d) -> gcd(b[i], k/d)\)

codeforces 703E Mishka and Divisors