Codeforces 1316 C. Primitive Primes

在这里插入图片描述
在这里插入图片描述

题意:

给出了两个多项式的系数,求两个多项式相乘后问系数不能被 p p 整除的幂的值

  • 高斯引理:两个本原多项式的乘积仍为本原多项式.
  • 本原多项式:满足所有系数的最大公因数为 1 1 的多项式

a i a_i 表示第一个多项式的 i i 次方的系数 b i b_i 表示第二个多项式的 i i 次方的系数
c i c_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
每个项都有 a 0 a_0 a i 1 a_{i-1} b 0 b_0 b j 1 b_{j-1} 的一部分
找到一个找到不可被 p p 整除的 c t c_t ,意思是 c t % p ! = 0 c_t\%p!=0 ,即 a % p ! = 0 , b % p ! = 0 a\%p!=0,b\%p!=0 ,
我们找到第一个符合的,记为 a i a_i b j b_j 。在此之前全部系数都可以被 p p 整除,
当系数为 ( 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
此时只有 a i b j a_i*b_j 不可被 p p 整除,其他的都可以。
所以一定有 c t % p ! = 0 c_t\%p!=0
给出的是本原多项式就是保证了不是所有系数数都能整除任何一个 m o d mod ,这样 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;
}

发布了704 篇原创文章 · 获赞 420 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/qq_43627087/article/details/104668814