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 b1bn,其中 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+n1modp。请你计算 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} bi105,p1010

Solution

给出的是一个等比数列,公比为 a a a,注意这里给定的数列在  mod  p \\ \\text{mod}\\ p  mod p 意义下是等比数列,也就意味着有两种情况:

  1. 本身就是 a k , a k + 1 , a k + 2 ⋯ a^k,a^{k+1},a^{k+2}\\cdots ak,ak+1,ak+2 的等比数列,有没有模数均可。

  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=bi1bi+1

对于上面提到的两种情况,整个序列的 i ∈ [ 2 , n − 1 ] i\\in [2,n-1] i[2,n1],均有:

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=bi1bi+1modpbi 2bi1bi+1modpbi 2bi1bi+10modp

显然有 p   ∣   b i   2 − b i − 1 b i + 1 p\\ | \\ b_i^{\\ 2}-b_{i-1}b_{i+1} p  bi 2bi1bi+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 2bi1bi+1},i[2,n1] 的质因子。

通过分析我们可以发现显然 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 2bi1bi+1},i[2,n1] 的所有质因子,判断该质因子是否合法即可。

为了检验该质因子模数合法,我们可以使用该模数求出模 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枚奖牌

ACM-ICPC 2018全国邀请赛(陕西西安)

2019icpc西安邀请赛

2019 icpc西安邀请赛 点分治

2019ICPC西安邀请赛(计蒜客复现赛)总结

2019ICPC西安邀请赛 E. Tree 树剖 + 线段树