#include <map>
#include <stack>
#include <queue>
#include <deque>
#include <cmath>
#include <vector>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define L(i) i<<1
#define R(i) i<<1|1
#define INF 0x3f3f3f3f
#define pi acos(-1.0)
#define eps 1e-12
#define maxn 100100
#define MOD 1000000007
#define ll long long
ll T,n,m,a[11],b[11],x,y,gcd;
void E_gcd(ll ai,ll bi)
{
if(!bi)
{
x = 1;
y = 0;
gcd = ai;
return;
}
E_gcd(bi,ai%bi);
ll tmp = x;
x = y;
y = tmp - ai / bi * y;
}
int main()
{
cin >> T;
while(T--)
{
cin>>n>>m;
for(int i = 1; i <= m; i++)
cin >> a[i];
for(int i = 1; i <= m; i++)
cin >> b[i];
int flag = 0;
ll a1 = a[1],b1 = b[1];
for(int i = 2; i <= m; i++)
{
ll a2 = a[i],b2 = b[i];
E_gcd(a1,a2);
if((b2-b1) % gcd)
{
flag = 1;
break;
}
x *= ((b2 - b1) / gcd);
ll t = a2 / gcd;
x = (x % t + t) % t;
b1 += a1 * x;
a1 = (a1 * a2 / gcd);
b1 = (b1 % a1 + a1) % a1;
}
if(flag || b1 > n)
cout<<"0"<<endl;
else
cout<<(n-b1)/a1+1-(!b1?1:0)<<endl;
}
}
HDU 1573 X问题 (中国剩余定理非互质)
最新推荐文章于 2019-04-15 16:31:09 发布