题意:
给出了两个多项式的系数,求两个多项式相乘后问系数不能被 p p p 整除的幂的值
- 高斯引理:两个本原多项式的乘积仍为本原多项式.
- 本原多项式:满足所有系数的最大公因数为 1 1 1 的多项式
用
a
i
a_i
ai表示第一个多项式的
i
i
i 次方的系数
b
i
b_i
bi表示第二个多项式的
i
i
i 次方的系数
c
i
c_i
ci表示相乘后
i
i
i 次方的乘积后的系数
c
i
=
a
∗
b
i
+
a
1
∗
b
i
−
1
+
…
+
a
i
−
1
∗
b
1
+
a
i
∗
b
0
c_i=a*b_i+a_1*b_{i-1}+…+a_{i-1}*b_1+a_i*b_0
ci=a∗bi+a1∗bi−1+…+ai−1∗b1+ai∗b0
每个项都有
a
0
a_0
a0 到
a
i
−
1
a_{i-1}
ai−1 或
b
0
b_0
b0 到
b
j
−
1
b_{j-1}
bj−1 的一部分
找到一个找到不可被
p
p
p 整除的
c
t
c_t
ct,意思是
c
t
%
p
!
=
0
c_t\%p!=0
ct%p!=0,即
a
%
p
!
=
0
,
b
%
p
!
=
0
a\%p!=0,b\%p!=0
a%p!=0,b%p!=0,
我们找到第一个符合的,记为
a
i
a_i
ai 和
b
j
b_j
bj。在此之前全部系数都可以被
p
p
p 整除,
当系数为
(
i
+
j
)
(i+j)
(i+j) 时,
c
t
=
a
0
∗
b
i
+
j
+
a
1
∗
b
i
+
j
−
1
+
.
.
.
+
a
i
∗
b
j
+
.
.
.
+
a
i
+
j
∗
b
0
c_t=a_0*b_{i+j}+a_{1}*b_{i+j-1}+...+a_i*b_j+...+a_{i+j}*b_0
ct=a0∗bi+j+a1∗bi+j−1+...+ai∗bj+...+ai+j∗b0
此时只有
a
i
∗
b
j
a_i*b_j
ai∗bj 不可被
p
p
p 整除,其他的都可以。
所以一定有
c
t
%
p
!
=
0
c_t\%p!=0
ct%p!=0。
给出的是本原多项式就是保证了不是所有系数数都能整除任何一个
m
o
d
mod
mod ,这样
a
,
b
a,b
a,b 序列都可以找到至少一个满足的下标。
AC代码:
int n, m, p;
int ans, res, x;
int main()
{
n = read();
m = read();
p = read();
ans = -1;
rep(i, 1, n)
{
x = read();
if (ans == -1 && x % p)
ans = i - 1;
}
res = -1;
rep(i, 1, m)
{
x = read();
if (res == -1 && x % p)
res = i - 1;
}
Out(ans + res);
return 0;
}