1 条题解
-
0
素数博弈
算法思路
将 分解为
记 ,即包含重复次数的素因子总数。
每次操作恰好移除一个素因子,因此无论双方如何选择,游戏都恰好进行 次操作。
Alice 进行第 次操作,Bob 进行第 次操作。因此:
-
若 为奇数,Alice 完成最后一次操作,输出
Alice; -
若 为偶数,输出
Bob。
实现时,先筛出不超过 的所有素数。对于每组数据,令 ,依次用素数 试除: 只要 整除 ,就令 除以 ,并将 加 。 当 时停止;若此时 ,则剩余的 是一个素数,将 再加 。
注意,素因子需要重复计算。例如 ,因此 。 当 时,,输出
Bob。正确性证明
根据唯一分解定理,每次除以一个素数,都会使素因子总数恰好减少 。 当且仅当素因子总数变为 时,黑板上的数变为 ,游戏结束。 因此,游戏的操作次数恒为初始的 。
若 为奇数,最后一次操作由 Alice 完成;若 为偶数,Alice 无法获胜。 算法通过素因数分解正确统计 ,并根据其奇偶性判断胜者,因此算法正确。
复杂度分析
设 为 的上界,, 为不超过 的素数个数。
使用埃氏筛预处理的时间复杂度为 , 每组试除分解的时间复杂度为 。 因此,总时间复杂度为
空间复杂度为 。
-
- 1
信息
- ID
- 725
- 时间
- 1000ms
- 内存
- 256MiB
- 题目 Rating
- 标签
- 递交数
- 32
- 已通过
- 6
- 上传者