1 条题解

  • 0
    @ 2026-10-23 20:48:07

    素数博弈

    算法思路

    将 nn 分解为

    n=p1e1p2e2⋯pkek.n=p_{1}^{e_1}p_{2}^{e_2}\cdots p_{k}^{e_k}.

    记 C=e1+e2+⋯+ekC=e_{1}+e_{2}+\cdots+e_{k},即包含重复次数的素因子总数。

    每次操作恰好移除一个素因子,因此无论双方如何选择,游戏都恰好进行 CC 次操作。

    Alice 进行第 1,3,5,…1,3,5,\ldots 次操作,Bob 进行第 2,4,6,…2,4,6,\ldots 次操作。因此:

    • 若 CC 为奇数,Alice 完成最后一次操作,输出 Alice;

    • 若 CC 为偶数,输出 Bob。

    实现时,先筛出不超过 10410^{4} 的所有素数。对于每组数据,令 x=nx=n,依次用素数 pp 试除: 只要 pp 整除 xx,就令 xx 除以 pp,并将 CC 加 11。 当 p2>xp^{2}>x 时停止;若此时 x>1x>1,则剩余的 xx 是一个素数,将 CC 再加 11。

    注意,素因子需要重复计算。例如 12=22⋅312=2^{2}\cdot 3,因此 C=3C=3。 当 n=1n=1 时,C=0C=0,输出 Bob。

    正确性证明

    根据唯一分解定理,每次除以一个素数,都会使素因子总数恰好减少 11。 当且仅当素因子总数变为 00 时,黑板上的数变为 11,游戏结束。 因此,游戏的操作次数恒为初始的 CC。

    若 CC 为奇数,最后一次操作由 Alice 完成;若 CC 为偶数,Alice 无法获胜。 算法通过素因数分解正确统计 CC,并根据其奇偶性判断胜者,因此算法正确。

    复杂度分析

    设 N=108N=10^{8} 为 nn 的上界,L=N=104L=\sqrt{N}=10^{4},PP 为不超过 LL 的素数个数。

    使用埃氏筛预处理的时间复杂度为 O(Llog⁡log⁡L)O(L\log\log L), 每组试除分解的时间复杂度为 O(P+log⁡N)O(P+\log N)。 因此,总时间复杂度为

    O(Llog⁡log⁡L+t(P+log⁡N)),O(L\log\log L+t(P+\log N)),

    空间复杂度为 O(L)O(L)。

    信息

    ID
    725
    时间
    1000ms
    内存
    256MiB
    题目 Rating
    1600
    标签
    递交数
    32
    已通过
    6
    上传者