CF1316C Primitive Primes

题意

给定两个多项式函数 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++an1xn1 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++bn1xn1

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 aibj的形式,且 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} a0bx+y是p的倍数,因为a0是p的倍数),所以就构成了 t ∗ p + r , r = a x ∗ b y t*p+r,r=a_x*b_y tp+r,r=axby

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值