首先题目保证有答案
这里用到一个约数的性质
(a+b*g+c*g...)%g=a%g
这题主要是要排除掉a%p!=0,b%p!=0,但(a+b)%p==0
找到最小的不被p整除的数ai和bj,则ci+j就是符合条件的,因为如果有其他项(假设为o,p)也参与了的xi+j的系数,即o+p=i+j则o,p中必有(o<i或 p<j)
根据约数性质,有o+p项得到的系数(由于i,j是最小,之前都可被p整除)必会被p整除掉,不会影响i+j项的系数
所以xi+j项系数(a0*bi+j+a1*bi+j-1+…)+ai*bj+(ai+1*bj-1+ai+2*bj-2+…)中只有ai*bj不被p整除,所以整项系数不被p整除
代码
#include <iostream> using namespace std; const int N=1e6+9; long long n,m,p,x,y,f[N],g[N]; int main(int argc, char *argv[]) { ios::sync_with_stdio(false); cin>>n>>m>>p; x=y=-1; for(int i=0;i<n;i++){ cin>>f[i]; if(x==-1) if(f[i]%p) x=i; } for(int i=0;i<m;i++){ cin>>g[i]; if(y==-1) if(g[i]%p) y=i; } cout<<x+y; return 0; }