1 条题解
-
0
核心思路
关键观察
-
冲突本质:当两个数 和 满足 时,它们会被分配到同一个桶中,从而产生冲突。
-
探测原理:通过精心构造的查询序列,我们可以检测两个数是否同余模 ,从而逐步确定 的值。
核心公式与构造方法
基础探测公式
对于任意整数 ,如果:
那么插入序列 会产生 次冲突(因为第二个数插入时桶中已有一个元素),否则冲突次数为 。
倍数构造法
构造两个特殊序列:
- 序列 :$S = \{1 \cdot L, 2 \cdot L, 3 \cdot L, \dots, k \cdot L\}$
- 序列 :$T = \{(118 \cdot 1 + 1)L, (118 \cdot 2 + 1)L, \dots, (118 \cdot m + 1)L\}$
其中 是一个精心选择的基数。
关键判定
计算 :
- 如果结果为 ,说明所有 中的元素与 中的元素都不同余模 ,进入情况一
- 如果结果不为 ,说明存在同余对,进入情况二
情况一:无直接冲突
采用分治搜索策略:
- 将序列 和 不断二分
- 通过合并查询确定哪半个序列包含同余对
- 最终找到一对具体的 满足
此时 整除 ,我们得到 的一个倍数 。
情况二:存在直接冲突
直接寻找满足条件的 ,使得:
这等价于:
$$1 \equiv 1 + i \cdot L \pmod{n} \Rightarrow i \cdot L \equiv 0 \pmod{n} $$因此 整除 ,得到 的一个倍数 。
因子消去法
在两种情况下,我们都先获得 的一个倍数 ,然后通过质因数分解和验证来消去多余的因子:
对于 的每个质因子 ,重复检查:
如果检查通过,说明 不能被 整除,将 除以 。最终剩下的 就是正确的 。
算法优势
- 高效性:通过分治策略将问题规模对数级减少
- 可靠性:基于数论原理,确保正确性
- 经济性:总花费远低于 的限制
-
- 1
信息
- ID
- 4141
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者