zoukankan      html  css  js  c++  java
  • CF1316C Primitive Primes

    CF1316C 【Primitive Primes】
    给出两个多项式\(a_0+a_1x+a_2x^2+\dots +a_{n-1}x^{n-1}\)\(b_0+b_1x+b_2x^2+ \dots +a_{m-1}x^{m-1}\),每个多项式的系数的\(\gcd\)都为1
    给出质数\(p\),求在这两个多项式乘积的系数中,任意一个不能被\(p\)整除的系数
    比赛的时候没想到,居然了想用线段树维护,什么都想用线段树。。然后悲惨掉分
    设乘积的系数序列为\(c\)
    我们可以设在这两个序列中,第一个不能被\(p\)整除的数分别是\(a_i\)\(b_j\)(肯定会存在这样的\(i,j\),否则它们的gcd就是\(p\)了)
    则可以证明要求的系数为\(c_{i+j}\)

    \[c_{i+j}=\sum_{k=0}^{i+j}a_k\times b_{i+j-k} \]

    这里假设有足够多的项(\(i+j\leq n,m\)
    因为\(a_0,a_1,a_2\dots a_{i-1}\)\(b_0,b_1,b_2\dots b_{j-1}\)都能被\(p\)整除
    所以上面的式子中,只有\(a_i\times b_j\)这一项不能被\(p\)整除,其他项中都含有一个\(a_k(k<i\))或\(b_k(k<j)\)
    所以原式相当于一个\(p\)的倍数加一个非\(p\)的倍数的数
    那么其当然不能被\(p\)整除

    #include<cstdio>
    #include<algorithm>
    #include<iostream>
    #include<cmath>
    #include<iomanip>
    #include<cstring>
    #define reg register
    #define EN std::puts("")
    #define LL long long
    inline int read(){
    	int x=0,y=1;
    	char c=std::getchar();
    	while(c<'0'||c>'9'){if(c=='-') y=0;c=std::getchar();}
    	while(c>='0'&&c<='9'){x=x*10+(c^48);c=std::getchar();}
    	return y?x:-x;
    }
    int n,m,p;
    int main(){
    	n=read();m=read();p=read();
    	int a=-1,b=-1;
    	for(reg int x,i=0;i<n;i++){
    		x=read();
    		if(x%p&&a==-1) a=i;
    	}
    	for(reg int x,i=0;i<m;i++){
    		x=read();
    		if(x%p&&b==-1) b=i;
    	}
    	std::printf("%d",a+b);
    	return 0;
    }
    
  • 相关阅读:
    utuntu sever1804显示中文putty可以输入中文
    windows上用putty从linux上下载文件
    2020Ubuntu server1804最新安装后的配置
    2020年ubuntu sever1804 安装和配置
    堡垒机
    防病毒网关
    审计系统
    常用网站
    AWVS的使用1
    windows Server 监控远程桌面连接信息
  • 原文地址:https://www.cnblogs.com/suxxsfe/p/12425441.html
Copyright © 2011-2022 走看看