题意:
给出函数 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;
}