Primitive Primes CodeForces - 1316C

题意:

给出函数 f(x)=a0+a1∗x+⋯+an−1∗xn−1,g(x)=b0+b1∗x+⋯+bm−1∗xm−1,保证:gcd(a0,a1,…,an−1)=gcd(b0,b1,…,bm−1)=1,令 h(x)=f(x)∗g(x)=c0+c1∗x+⋯+cn+m−2∗xn+m−2;给出素数 p ,要求求出数 t 使得 ct 不能被 p 整除(保证t一定存在)。
数据范围: 1≤n,m≤1e6,2≤p≤109,1≤ai,bj≤1e9

题解:比赛时看时间限制1.5s,再加上前几天刚刚学点fft,觉得这题应该要用fft写,不过自己不会qwq。。。

于是乱搞一下,发现h(x)也应该满足gcd(c0,c1,…,cn+m-2)=1.那么令ai为f中第一个p不能整除的数,bj为g中第一个不能被p整除的数,ci+j不能被p整除。因为ci+j=(a0*bi+j+a1*bi+j-1+...)+ai*aj+(...+ai+j*b0);

    #include <bits/stdc++.h>
    typedef long long ll;
    using namespace std;
    const int maxn=1e6+3;
    int a[maxn],b[maxn],n,m,p;
     
    int main() {
    	scanf("%d %d %d",&n,&m,&p);
    	for(int i=0;i<n;i++) scanf("%d",a+i);
    	for(int i=0;i<m;i++) scanf("%d",b+i);
    	int x1=0;
    	for(int i=0;i<n;i++){
    		if(a[i]%p!=0) {
    			x1=i;break;
    		}
    	}
    	int x2=0;
    	for(int i=0;i<m;i++){
    		if(b[i]%p!=0) {
    			x2=i;break;
    		}
    	}
    	printf("%d\n",x1+x2);
    	return 0;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值