模线性方程的模板题。(卡了一会,发现读入弄错了)
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<map>
#include<queue>
#include<set>
#include<vector>
using namespace std;
typedef long long ll;
const int MAXN=1e2+5;
int n,m,A,B;
int a[MAXN],b[MAXN];
void ex_gcd(int a,int b,int &d,int &x,int &y)
{
if(!b)
{
d=a; x=1; y=0;
}
else
{
ex_gcd(b,a%b,d,y,x); y-=(a/b)*x;
}
}
bool eqt_mod(int &A,int &B,int m)
{
int C,x,y,d;
for(int i=1;i<m;i++)
{
C=b[i]-B; ex_gcd(A,a[i],d,x,y);
if(C%d) return false;
x=C/d*x%(a[i]/d); B+=A*x; A*=a[i]/d; B%=A;
}
if(B<0) B+=A;
return true;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++)
{
scanf("%d",&a[i]);
}
for(int i=0;i<m;i++)
{
scanf("%d",&b[i]);
}
A=a[0]; B=b[0];
if(eqt_mod(A,B,m))
{
//printf("A=%d B=%d\n",A,B);
if(n<B)
{
printf("0\n");
}
else if(0==B)
{
printf("%d\n",n/A);
}
else
{
printf("%d\n",(n-B)/A+1);
}
}
else
{
printf("0\n");
}
}
return 0;
}