2019 ICPC全国邀请赛(西安)I. Cracking Password(序列检验,BSGS,细节题)
Posted 繁凡さん
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019 ICPC全国邀请赛(西安)I. Cracking Password(序列检验,BSGS,细节题)相关的知识,希望对你有一定的参考价值。
整理的算法模板合集: ACM模板
实际上是一个全新的精炼模板整合计划
2019 ICPC全国邀请赛(西安)I. Cracking Password
Weblink
https://nanti.jisuanke.com/t/39276
Problem
给定一个长度为
n
n
n 的序列,
b
1
⋯
b
n
b_1\\cdots b_n
b1⋯bn,其中
b
1
=
a
k
m
o
d
p
,
b
2
=
a
k
+
1
m
o
d
p
,
⋯
,
b
n
=
a
k
+
n
−
1
m
o
d
p
b_1=a^k\\mod p,b_2=a^{k+1}\\mod p,\\cdots,b_n=a^{k+n-1}\\mod p
b1=akmodp,b2=ak+1modp,⋯,bn=ak+n−1modp。请你计算
a
,
p
a, p
a,p 的值,若有多解,输出 unsure
, 若无解,输出 error
,否则输出
a
a
a 和
p
p
p 。
b i ≤ 1 0 5 , p ≤ 1 0 10 b_i\\le 10^5,p\\le10^{10} bi≤105,p≤1010
Solution
给出的是一个等比数列,公比为 a a a,注意这里给定的数列在 mod p \\ \\text{mod}\\ p mod p 意义下是等比数列,也就意味着有两种情况:
-
本身就是 a k , a k + 1 , a k + 2 ⋯ a^k,a^{k+1},a^{k+2}\\cdots ak,ak+1,ak+2⋯ 的等比数列,有没有模数均可。
-
本身不是 a k , a k + 1 , a k + 2 ⋯ a^k,a^{k+1},a^{k+2}\\cdots ak,ak+1,ak+2⋯ 的等比数列,模上特殊的模数之后变为权值为 a k , a k + 1 , a k + 2 ⋯ a^k,a^{k+1},a^{k+2}\\cdots ak,ak+1,ak+2⋯ 的等比数列。
为了验证该数列为等比数列,我们可以找一些等比数列特有的性质,来予以验证。
显然对于一个等比数列,有性质:等比中项,即 b i 2 = b i − 1 b i + 1 b_i^{\\ 2}=b_{i-1}b_{i+1} bi 2=bi−1bi+1 。
对于上面提到的两种情况,整个序列的 i ∈ [ 2 , n − 1 ] i\\in [2,n-1] i∈[2,n−1],均有:
b i 2 m o d p = b i − 1 b i + 1 m o d p b i 2 ≡ b i − 1 b i + 1 m o d p b i 2 − b i − 1 b i + 1 ≡ 0 m o d p \\begin{aligned}b_i^{\\ 2}\\mod p=b_{i-1}b_{i+1}\\mod p\\\\b_i^{\\ 2}\\equiv b_{i-1}b_{i+1}\\mod p\\\\b_i^{\\ 2}-b_{i-1}b_{i+1}\\equiv0 \\mod p\\end{aligned} bi 2modp=bi−1bi+1modpbi 2≡bi−1bi+1modpbi 2−bi−1bi+1≡0modp
显然有 p ∣ b i 2 − b i − 1 b i + 1 p\\ | \\ b_i^{\\ 2}-b_{i-1}b_{i+1} p ∣ bi 2−bi−1bi+1。
因此 p p p 一定是 g c d { b i 2 − b i − 1 b i + 1 } , i ∈ [ 2 , n − 1 ] gcd\\{b_i^{\\ 2}-b_{i-1}b_{i+1}\\},i\\in [2,n-1] gcd{bi 2−bi−1bi+1},i∈[2,n−1] 的质因子。
通过分析我们可以发现显然 a a a 为定值,我们只需要枚举 g c d { b i 2 − b i − 1 b i + 1 } , i ∈ [ 2 , n − 1 ] gcd\\{b_i^{\\ 2}-b_{i-1}b_{i+1}\\},i\\in [2,n-1] gcd{bi 2−bi−1bi+1},i∈[2,n−1] 的所有质因子,判断该质因子是否合法即可。
为了检验该质因子模数合法,我们可以使用该模数求出模 p p p 意义下的 a a a 的值,即 a = a k + 1 a k m o d p = a k + 1 × i n v ( a k ) m o d p a=\\cfrac{a^{k+1}}{a^k}\\mod p=a^{k+1}\\times inv(a^k) \\mod p a=akak+1modp=ak+1×inv(ak)modp,使用当前枚举到的模数 p p 2021 ICPC全国邀请赛(西安)太原理工大学收获3枚奖牌