3 10 3 1 2 3 0 1 2 100 7 3 4 5 6 7 8 9 1 2 3 4 5 6 7 10000 10 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 9
1 0 3
/*------------------Header Files------------------*/ #include <iostream> #include <cstring> #include <string> #include <cstdio> #include <algorithm> #include <cstdlib> #include <ctype.h> #include <cmath> #include <stack> #include <queue> #include <deque> #include <map> #include <vector> #include <set> #include <limits.h> using namespace std; /*------------------Definitions-------------------*/ #define LL long long #define uLL unsigned long long #define PI acos(-1.0) #define INF 0x3F3F3F3F #define MOD 1000000007 #define MAX 105 #define lson rt<<1,l,m #define rson rt<<1|1,m+1,r /*---------------------Work-----------------------*/ LL n,N,m[15],c[15]; LL e_gcd(LL a,LL b,LL &x,LL &y) { if(!b) { x=1; y=0; return a; } else { LL res=e_gcd(b,a%b,x,y); LL temp=x; x=y; y=temp-(a/b)*y; return res; } } LL mod(LL x,LL y) { LL res=x%y; if(res<=0) res+=y; return res; } void work() { int T; cin>>T; while(T--) { scanf("%I64d%I64d",&N,&n); for(int i=1;i<=n;i++) scanf("%I64d",m+i); for(int i=1;i<=n;i++) scanf("%I64d",c+i); bool check=true; LL ans=c[1],lcm=m[1],x,y; if(ans==0) ans=m[1]; for(int i=2;i<=n;i++) { LL g=e_gcd(lcm,m[i],x,y); if((c[i]-ans)%g) { check=false; break; } ans=mod(ans+lcm*mod((c[i]-ans)/g*x,m[i]/g),lcm/g*m[i]); lcm=lcm/g*m[i]; } if(check) { if(N>=ans) printf("%I64d\n",(N-ans)/lcm+1); else printf("0\n"); } else printf("0\n"); } } /*------------------Main Function------------------*/ int main() { //freopen("test.txt","r",stdin); work(); return 0; }