SRM 547 DIV2 Hard: RelativelyPrimeSubset
解法
Sの要素が100以下と小さいので100以下の素因数でビットDPを試みたい。しかし、100以下の素数の個数は25個なので
2^25 * |S| <= 2^25*50 = 1.6777216 × 10^9
で間に合わない。
ここでたかだか25個の素数を列挙してみると
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97
このうち53,59,61,67,71,73,79,83,89,97の10個の素数については
53*2>100より
Sの要素xが53以上の素因数をもつとき、xは素数。
よって53以上の素数は別個にカウントすれば良い。
25-10 = 15個の素数についてビットDPすれば
2^15*|S| <= 2^15 * 50 = 1638400
で間に合う。