[CodeForces - 1316C] Primitive Primes
题意:
- 两个函数的系数卷积?得到新的函数。问新函数哪个系数和p互质?
思路:
对于
C
i
+
j
x
i
+
j
C_{i+j}x^{i+j}
Ci+jxi+j,我们假设
a
i
a_i
ai是第一个与p互质的
f
(
x
)
f(x)
f(x)系数,
b
j
b_j
bj是第一个与p互质的
g
(
x
)
g(x)
g(x)系数。
那么,
C
i
+
j
=
(
a
0
b
i
+
j
+
a
1
b
i
+
j
−
1
+
.
.
.
+
a
i
−
1
b
j
+
1
)
+
a
i
b
j
+
(
a
i
+
1
b
j
−
1
+
a
i
+
2
b
j
−
2
+
.
.
.
+
a
i
+
j
b
0
)
C_{i+j}=(a_0b_{i+j}+a_1b_{i+j-1}+...+a_{i-1}b_{j+1})+a_ib_j+(a_{i+1}b_{j-1}+a_{i+2}b_{j-2}+...+a_{i+j}b_{0})
Ci+j=(a0bi+j+a1bi+j−1+...+ai−1bj+1)+aibj+(ai+1bj−1+ai+2bj−2+...+ai+jb0)
前面说了,因为
a
i
a_i
ai和
b
j
b_j
bj都是第一个与p互质的系数,那么可以知道
a
k
%
p
=
=
0
(
k
<
i
)
a_k \%\ p==0(k < i)
ak% p==0(k<i),
b
k
%
p
=
=
0
(
k
<
j
)
b_k \%\ p==0(k < j)
bk% p==0(k<j)
所以上面
C
i
+
j
C_{i+j}
Ci+j的表达式中,括号中的都肯定%p为0,所以最后
C
i
+
j
%
p
=
a
i
b
j
%
p
≠
0
C_{i+j} \%p =a_ib_j \%p \neq 0
Ci+j%p=aibj%p=0
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline int read()
{
int x = 0, f = 1; char c = getchar();
while(c < '0' || c > '9') { if(c == '-') f = -f; c = getchar(); }
while(c >= '0' && c <= '9') { x = x * 10 + c - '0'; c = getchar(); }
return x * f;
}
const int maxN = 1000006;
int n, m, p;
int a[maxN], b[maxN];
int main()
{
n = read(); m = read(); p = read();
for(int i = 0; i < n; ++ i )
a[i] = read();
for(int i = 0; i < m; ++ i)
b[i] = read();
int ans;
for(int i = 0; i < n; ++ i )
if(a[i] % p) { ans = i; break; }
for(int i = 0; i < m; ++ i )
if(b[i] % p) { ans += i; break; }
cout << ans << endl;
return 0;
}