1 条题解

  • 0
    @ 2025-10-26 13:48:03

    核心思路

    关键观察

    1. 冲突本质:当两个数 xxyy 满足 xy(modn)x \equiv y \pmod{n} 时,它们会被分配到同一个桶中,从而产生冲突。

    2. 探测原理:通过精心构造的查询序列,我们可以检测两个数是否同余模 nn,从而逐步确定 nn 的值。

    核心公式与构造方法

    基础探测公式

    对于任意整数 a,ba, b,如果:

    ab(modn)a \equiv b \pmod{n}

    那么插入序列 [a,b][a, b] 会产生 11 次冲突(因为第二个数插入时桶中已有一个元素),否则冲突次数为 00

    倍数构造法

    构造两个特殊序列:

    • 序列 SS:$S = \{1 \cdot L, 2 \cdot L, 3 \cdot L, \dots, k \cdot L\}$
    • 序列 TT:$T = \{(118 \cdot 1 + 1)L, (118 \cdot 2 + 1)L, \dots, (118 \cdot m + 1)L\}$

    其中 L=9128×3=27384L = 9128 \times 3 = 27384 是一个精心选择的基数。

    关键判定

    计算 collisions(ST)collisions(S \cup T)

    • 如果结果为 00,说明所有 SS 中的元素与 TT 中的元素都不同余模 nn,进入情况一
    • 如果结果不为 00,说明存在同余对,进入情况二

    情况一:无直接冲突

    采用分治搜索策略:

    1. 将序列 SSTT 不断二分
    2. 通过合并查询确定哪半个序列包含同余对
    3. 最终找到一对具体的 (s,t)(s, t) 满足 st(modn)s \equiv t \pmod{n}

    此时 nn 整除 st|s - t|,我们得到 nn 的一个倍数 x=stx = |s - t|

    情况二:存在直接冲突

    直接寻找满足条件的 ii,使得:

    collisions({1,1+iL})=1collisions(\{1, 1 + i \cdot L\}) = 1

    这等价于:

    $$1 \equiv 1 + i \cdot L \pmod{n} \Rightarrow i \cdot L \equiv 0 \pmod{n} $$

    因此 nn 整除 iLi \cdot L,得到 nn 的一个倍数 x=iLx = i \cdot L

    因子消去法

    在两种情况下,我们都先获得 nn 的一个倍数 xx,然后通过质因数分解和验证来消去多余的因子:

    对于 xx 的每个质因子 pp,重复检查:

    collisions({1,xp+1})0collisions(\{1, \frac{x}{p} + 1\}) \neq 0

    如果检查通过,说明 nn 不能被 pp 整除,将 xx 除以 pp。最终剩下的 xx 就是正确的 nn

    算法优势

    1. 高效性:通过分治策略将问题规模对数级减少
    2. 可靠性:基于数论原理,确保正确性
    3. 经济性:总花费远低于 1,000,0001,000,000 的限制
    • 1

    信息

    ID
    4141
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者