Official

I - 1<->k Editorial by ytqm3


\(N\) についてのこの問題の答えを \(f(N)\) としましょう。

この時、中国剰余定理より \(f(n)\) は乗法的関数であり、正整数 \(a, b\) が互いに素ならば \(f(ab) = f(a)f(b)\) が成り立ちます。

よって、 \(N\)\(\displaystyle \prod_i p_i^{e_i}\) (\(i \ne j\) ならば \(p_i \ne p_j\)\(p_i\) は素数) と素因数分解できるとき、 \(\displaystyle f(N) = \prod_i f(p_i^{e_i})\) と表せます。

これより、素数の正整数乗の形の値について問題を解くことができれば \(f(N)\) は高速に求まります。

奇素数(\(p\) とする)の正整数乗の形の値

\(k^2 \equiv 1 \pmod {p^e}\) であることは \((k + 1)(k - 1) \equiv 0 \pmod {p^e}\) であることと同値です。

ここで、 \(k + 1\)\(k - 1\) の差は \(2\) で、この値は \(p\) で割りきれないので、どちらも \(p\) の倍数であることはあり得ません。

よって、 \(k + 1\) または \(k - 1\)\(p^e\) の倍数であることが \((k + 1)(k - 1) \equiv 0 \pmod {p^e}\) であることの必要十分条件となっています。

これを満たす \(k\)\(1, -1 \pmod {p^e}\)\(2\) つであり、条件よりこの二つの数は \(p^e\) を法にして異なる数であるため、答えは \(2\) 通りです。

\(2\) の正整数乗の形の値

ここでも、 \(k^2 \equiv 1 \pmod {2^e}\) であることは \((k + 1)(k - 1) \equiv 0 \pmod {2^e}\) であることと同値です。

ここで、 \(k + 1\)\(k - 1\) の差は \(2\) で、この値は \(2^2\) で割り切れないので、どちらも \(2^2 (=4)\) の倍数であることはあり得ません。

よって、 \(k + 1\) または \(k - 1\)\(2^{e - 1}\) の倍数であることが \((k + 1)(k - 1) \equiv 0 \pmod {2^e}\) であることの必要十分条件となっています。

これを満たす \(k\)\(e = 1\) の場合 \(1\) つ、 \(e = 2\) の場合 \(2\) つ、 \(3 \le e\) の場合 \(4\) つありますので、それが答えになります。

結論

以上を踏まえると、 \(N\) が持つ異なる素因数の個数を \(\mathrm{cnt}\) として、

\(N\)\(2\)\(1\) 度も割り切れない場合 \(\cdots\) \(f(N) = 2^\mathrm{cnt}\)

\(N\)\(2\) でちょうど \(1\) 度割り切れる場合 \(\cdots\) \(f(N) = 2^\mathrm{cnt - 1}\)

\(N\)\(2\) でちょうど \(2\) 度割り切れる場合 \(\cdots\) \(f(N) = 2^\mathrm{cnt - 1} \times 2\)

\(N\)\(2\)\(3\) 度以上割り切れる場合 \(\cdots\) \(f(N) = 2^\mathrm{cnt - 1} \times 4\)

となります。以上より、 \(O(T\sqrt {N})\) の時間計算量で解くことができます。

実装例 (C++)

posted:
last update: