bzoj5348
题意:
你有一个随机数生成器,最初给定一个 \(0\leq x\leq n-1\) 的整数作为随机种子.
这个随机数生成器会每次输出 \(x\) 并将 \(x^k \bmod n\) 作为新的 \(x\)。
你很快发现这个随机数生成器很渣。为了证明它很渣,你想要求出有多少个随机种子,使得这个随机数生成器会输出初始种子无穷多次。
数据范围:\(n,k\leq 10^{18}\)。
1 |
|
首先,我们注意这样一个事。
当 \(n\in \text{prime}\) 怎么做?
方程怎么写?
\[ x^{k^t}\equiv x\pmod{n} \]
那么由于无论何时 \((x,n)=1\),阶始终存在,所以有:
\[ k^t\equiv 1\pmod{ord_n(x)} \]
也就是说:
\[ \gcd(k,ord_n(x))=1 \]
当我们知道阶为多少时,我们显然可以求出这个集合的大小。
我们现在枚举阶:
\[ \begin{aligned} \sum_{d\mid\phi(n)} \phi(d)[\gcd(d,k)=1]\\ \sum_{d\mid \phi(n),\gcd(d,k)=1}\phi(d) \end{aligned} \]
显然我们令 \(T\) 为 \(\phi(n)\) 剔除所有 \(k\) 因子的结果。
\(T\) 的求法可以用以下代码体现:
1
2
3while(gcd(phi,k)!=1){
phi/=gcd(phi,k);
}
那么此时狮子可化简为:
\[ \begin{aligned} \sum_{d\mid T} \phi(d)=T \end{aligned} \]
这是好的,那么我们有没有办法使得 \(n\not \in \text{prime}\) 使用类似方法做呢?
考虑如果对于 \(n\not \in \text{prime}\) 如果我们钦定 \(\gcd(x,n)=1\),上述做法依然成立。
现在问题被这个 \(\gcd\) 卡住了,那就考虑 \(\gcd\) 会产生什么厉害东西。
\(g=\gcd(x,n)\),我们考虑这样一个事,如果存在 \(p\),使得 \(p^a\mid\mid x,p^b\mid\mid n,a<b\)。
那么这样 \(x^d\),\(d\) 足够大时,\(p^b\mid x^d\),这样 \(x^d\) 不可能和 \(x\) 同余。
所以 \(g,x,n\) 存在关系。
\(\gcd(g,\frac{n}{g})=1,\gcd(g,\frac{x}{g})=1\)。
那么设 \(x=g\cdot X,n=g\cdot N\)
\[ \begin{aligned} x^{k^t}\equiv x\pmod{n}\\ (gX)^{k^t}\equiv gX\pmod{gN}\\ g^{k^t}X^{k^t}\equiv gX\pmod{gN}\\ \end{aligned} \]
等式两边同除 \(g\)。
$$ \[\begin{aligned} g^{k^t-1}X^{k^t}\equiv X\pmod{N}\\ g^{k^t-1}X^{k^t-1}\equiv 1\pmod{N}\\ k^t-1\equiv 0\pmod{ord_{N}(gX)}\\ k^t\equiv 1\pmod{ord_{N}(gX)} \end{aligned}\]$$
很眼熟是吧。
由于这个 \(gX\) 似乎并不那么平凡,我们只能先猜测这个的答案就是上面的答案。
也就是猜测 \(gX\) 与满足 \(k^t\equiv1\pmod{ord_{N}(x)}\) 的 \(x\in[1,N)\) 一一对应。
显然 \(ord_{N}(gX)=ord_N(gX\bmod N),\gcd(gX,N)=1\),所以每一个 \(gX\) 能仅对应一个满足的 \(x\)。
接下来考虑 \(gX\) 在 \(\bmod N\) 意义下互不相等。
反证法:如果 \(gA\equiv gB\pmod{N},gA\not \equiv gB\pmod{n}\),直接产生矛盾。(有关 \(A\equiv B\pmod{N}\) 的矛盾)
接下来考虑是否每一个满足的 \(x\) 都有一个 \(gX\) 与之对应。
因为 \(\gcd(g,N)=1\) 显然存在逆元。
\(gX\equiv x\pmod{N},X=g^{-1}x\pmod{N}\)
显然能够对应。
所以当 \(g\) 确定时,\(k^t\equiv 1\pmod{ord_{N}(gX)}\) 满足的 \(gX\) 个数就是上面所说的 \(x\) 的个数。
所以我们可以枚举 \(g\),从而算出结果。
复杂度 \(\mathcal{O(pollard-rho(n)+2^{\omega(n)}\log^2(n))}\)
后面可能是单 \(\log\) 但问题不大,复杂度瓶颈在于 \(pollard-rho(n)\),即分解质因数复杂度。
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!