题意
给定两个多项式函数
f
(
x
)
=
a
0
+
a
1
x
+
?
+
a
n
?
1
x
n
?
1
f(x)=a_0+a_1x+\dots+a_{n-1}x^{n-1}
f(x)=a0?+a1?x+?+an?1?xn?1和
g
(
x
)
=
b
0
+
b
1
x
+
?
+
b
n
?
1
x
n
?
1
g(x)=b_0+b_1x+\dots+b_{n-1}x^{n-1}
g(x)=b0?+b1?x+?+bn?1?xn?1
令
h
(
x
)
=
f
(
x
)
?
g
(
x
)
h(x)=f(x)*g(x)
h(x)=f(x)?g(x),c为相乘后的系数的代号,问是否存在c,使得c不能被质数p整除,问其中的一个c的下标是什么
题解
不得不说
这题好妙
前置知识:质因数分解
https://blog.csdn.net/qq_43408238/article/details/104669866
h的每一个元素是
a
i
?
b
j
a_i*b_j
ai??bj?的形式,且
i
+
j
i+j
i+j等于所属变量的幂
因为p是个质数,根据唯一分解定理,如果一个数是p的倍数,那么他的质因子一定有p
所以我们从前往后找第一个不被p整除的a和第一个不被整除的b的位置,
我们假设此时a的下标为x,b的下标为y,那么a0ax-1是会被p整除的,b0by-1是会被p整除的
而axby所在的项,也就是x的次数是x+y,我们知道axby不是p的倍数(相乘,唯一分解定理),而构成这个次数的系数的除了这一项以外一定是p的倍数(举例:
a
0
?
b
x
+
y
a_0*b_{x+y}
a0??bx+y?是p的倍数,因为a0是p的倍数),所以就构成了
t
?
p
+
r
,
r
=
a
x
?
b
y
t*p+r,r=a_x*b_y
t?p+r,r=ax??by?
Code
int n, m, p;
int a[N * 10], b[N * 10];
void solve(){
cin >> n >> m >> p;
for (int i = 1; i <= n; i++){
cin >> a[i];
}
for (int i = 1; i <= m; i++){
cin >> b[i];
}
int i, j;
for (i = 1; i <= n; i++){
if(a[i] % p != 0){
break;
}
}
for (j = 1; j <= m; j++){
if(b[j] % p != 0){
break;
}
}
cout << i - 1 + j - 1;
}
|