C - Unexpressed Editorial by shakayami
ここでは、setを使わない解法について解説します。
まず、1は\(a^b\)の形で表すことはできません。 よって、\(2\leq k\leq N\)の範囲内で条件を満たすものを答えればよいです。
全体集合は\(N-1\)個の要素があります。ここから\(a^2\)の形で書けるものを引きます。個数については二分探索でもできますし、愚直に数えても問題ないです。
さらに\(a^3\)の形で書けるものを引きます。これについては\(a^2\)と同様です。
\(a^4\)で書ける形のものは\(a^2\)の形でも書けるので、これについてはさらに引く必要はありません。
\(a^5\)で書けるものについては引きます。
\(a^6\)の形で書けるものは、\(a^2\)の形でも書けるし、\(a^3\)の形でも書くことができます。つまり2回分引いてしまっていて、余計に引いてしまっているので足します。
…
以上を繰り返すと、答えは以下の通りになります。
\(cnt(b)\)を\(2\leq a^b\leq N\)を満たす整数\(a\)の個数とします。このとき答えは
\[ans=\sum_{b=1}^{\infty}\mu(b)\cdot cnt(b)\]
ここで、\(\mu(b)\)はメビウス関数です。
さらに、\(b\)の足す範囲は、\(2^b\leq N\)を満たす\(b\)まででOKです。それ以降では\(cnt(b)=0\)となるため考慮する必要がありません。
\(cnt(b)\)を求めるときには、\(b=1\)のときは別途処理して(\(cnt(1)=N-1\)となる!)、それ以外では愚直に数えると、計算量は \(O(N^{1/2}+N^{1/3}+\cdots+N^{\lfloor\log_{2}{N}\rfloor})\) となり、間に合います。
posted:
last update: