题意
给定两个多项式函数 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+a1x+⋯+an−1xn−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+b1x+⋯+bn−1xn−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;
}