题目背景
Update:
时限扩大到 3 秒。
题目描述
小 Z 送了你一个数列,具体的,有 a 1 = 1 a_1=1 a1=1, a 2 = 2 a_2=2 a2=2, a i = 2 a i − 1 + k a i − 2 ( 3 ≤ i ≤ n ) a_i=2a_{i-1}+ka_{i-2}(3\le i\le n) ai=2ai−1+kai−2(3≤i≤n),其中 n 是数列的长度,k 是她设定的一个正整数参数。
小 Z 告诉你一个秘密,这个数列是她精心挑选的,有着一种奇妙的性质 “Prime-smooth”—— 即对于 n 以内的任何一个质数 p,满足 p ∣ a p p\mid a_p p∣ap( ∣ \mid ∣ 是整除记号)。
你很好奇是不是真的有这回事,于是你写了一个质数发生器,进行了长达三天三夜的尝试,终于发现了几个反例:有 m 个质数 p i p_i pi竟然不满足小 Z 所说的性质!
由于你已经随机了很久,你相信别的质数 一定满足 性质。
为了表明你和小 Z 心有灵犀,你现在想猜出小 Z 当时设定的参数 k,由于答案很大,你只需要求出最小的 k 对一个质数 c 取模即可。
输入格式
第一行三个非负整数 n , m , c n,m,c n,m,c,它们与题面中含义相同。
接下来 m 行,每行一个正整数 i,表示对于从小到大数第 i 个质数 p i p_i pi,不满足 p i ∣ a p i p_i\mid a_{p_i} pi∣api 。我们保证这个质数 p i ≤ n p_i\le n pi≤n。注意:不保证这 m 个数两两不同。
输出格式
一行一个整数,为最小的 k 对 c 取模后的值。
特别的,如果出现无解的情况,输出 −1。
输入输出样例
输入 #1 复制
10 1 998244353
3
输出 #1 复制
20
输入 #2 复制
40 2 1018429441
1
4
输出 #2 复制
-1
说明/提示
【数据范围】
10 ≤ n ≤ 3 × 1 0 8 10\le n\le 3\times 10^8 10≤n≤3×108 。
n < c < 2 30 n\lt c\lt 2^{30} n<c<230, c = a ⋅ 2 k + 1 ( k ≥ 18 ) c=a\cdot 2^k+1(k\ge 18) c=a⋅2k+1(k≥18),保证 c 是质数。
0 ≤ m ≤ 20 0\le m\le 20 0≤m≤20。
题解
直接求出通项:
先设出生成函数 A ( x ) = 2 x A ( x ) + k x 2 A ( x ) + 2 x + 1 A(x)=2xA(x)+kx^2A(x)+2x+1 A(x)=2xA(x)+kx2A(x)+2x+1
解方程 A ( x ) = 2 x + 1 1 − 2 x − k x 2 A(x)=\frac{2x+1}{1-2x-kx^2} A(x)=1−2x−kx22x+1
因式分解 A ( x ) = 2 x + 1 ( 1 − ( 1 + k + 1 ) x ) ( 1 − ( 1 − k + 1 ) x ) A(x)=\frac{2x+1}{(1-(1+\sqrt{k+1})x)(1-(1-\sqrt{k+1})x)} A(x)=(1−(1+k+1)x)(1−(1−k+1)x)2x+1
然后可以把通项公式写成 a n = x ( 1 + k + 1 ) n + y ( 1 − k + 1 ) n a_n=x(1+\sqrt{k+1})^n+y(1-\sqrt{k+1})^n an=x(1+k+1)n+y(1−k+1)n的形式,然后待定系数一下就可以求出x和y了。
最后的通项公式是这个样子的
a
n
=
(
1
+
k
+
1
)
n
−
(
1
−
k
+
1
)
n
2
k
+
1
a_n=\frac{(1+\sqrt{k+1})^n-(1-\sqrt{k+1})^n}{2\sqrt{k+1}}
an=2k+1(1+k+1)n−(1−k+1)n
然后用二项式定理展开:
a
p
=
∑
i
=
0
p
−
1
2
(
2
i
+
1
p
)
(
k
+
1
)
i
a_p=\sum_{i=0}^{\frac{p-1}{2}}\Big(^{\ \ \ \;p}_{2i+1}\Big)(k+1)^i
ap=i=0∑2p−1(2i+1 p)(k+1)i
这个东西模了p之后,就成这个样子了:
a
p
≡
(
k
+
1
)
p
−
1
2
(
m
o
d
p
)
a_p\equiv(k+1)^{\frac{p-1}{2}} \pmod p
ap≡(k+1)2p−1(modp)
也就是说要满足条件,当且仅当
k
≡
−
1
(
m
o
d
p
)
k\equiv-1\pmod p
k≡−1(modp)
根据中国剩余定理,k的最小值为:
p
1
p
2
p
3
.
.
.
p
m
−
1
p_1p_2p_3...p_m-1
p1p2p3...pm−1(除去那几个不满足的的质数)
这个东西可以用筛法硬算,但是数据太大,可以把2和3的倍数手动筛掉,然后再埃氏筛(这题卡常啊。。。)