模线性方程的模板题。(卡了一会,发现读入弄错了)
#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;
}