/*
同余方程组为 X = ri (mod ai)
在范围内求X的个数
先求出特解 X0;
求出 ai数组的LCM;
则有 Xi = X0+LCM 均能满足方程组,判断是否在范围内!!
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long LL;
LL Ai[20],Ri[20];
void Exgcd(LL a,LL b,LL& d,LL& x,LL& y)
{
if(b == 0) {d = a, x = 1, y = 0;}
else {Exgcd(b,a%b,d,y,x); y -= x*(a/b);}
}
LL Solve(LL* ai,LL* ri,LL n)
{
LL r1 = ri[1], a1 = ai[1];
LL x, y;
bool Jug = true;
for(LL i = 2; i <= n; ++i)
{
LL d;
LL a = a1, b = ai[i], c = ri[i] - r1;
Exgcd(a,b,d,x,y);
if(c % d) Jug = false;
LL t = b / d;
x = (x * (c / d)% t+ t)%t;
r1 = a1 * x + r1;
a1 = a1 * (ai[i]/d);
}
if(Jug) return r1;
else return -1;
}
LL gcd(LL a,LL b) {return b ? gcd(b,a%b) : a;}
int main()
{
LL N,M,T;
cin >> T;
while(T--)
{
cin >> N >> M;
LL Lcm = 1;
for(LL i = 1; i <= M; ++i)
{
cin >> Ai[i];
Lcm = Lcm / gcd(Lcm,Ai[i]) * Ai[i];
}
for(LL i = 1; i <= M; ++i)
{
cin >> Ri[i];
}
LL tmp = Solve(Ai,Ri,M);
//cout << Lcm << endl;
if(tmp == -1) cout << "0\n";
else
{
LL ans = 0;
if(tmp <= N) ans = 1 + (N - tmp) / Lcm;
if(tmp == 0 && ans > 0) ans --;
cout << ans << endl;
}
}
}

最新文章

  1. Android Studio快速开发之道
  2. jsmooth compilation failed error null
  3. 使用jQuery的animate方法制作滑动菜单
  4. golang开发环境配置及Beego框架安装
  5. jquery点击添加样式,再点击取出样式
  6. [译]- 6-1 排列窗体上的控件(Laying Out Widgets on a Form)
  7. How to use HaploView
  8. (收藏)C#实现截屏
  9. HDU1896Stones(优先队列)
  10. Web服务器(CassiniDev的裁减版)
  11. Java基础知识强化之IO流笔记14:递归之输出指定目录下所有java文件绝对路径的案例
  12. 12.Linux之输入子系统分析(详解)
  13. HTML协议详解
  14. 【原】使用vue2+vue-router+vuex写一个cnode的脚手架
  15. Web Penetration Testing w3af fierce
  16. HTML文本格式化与HTML 超链接
  17. vs2017添加引用出错:对COM组件的调用返回了错误HRESULT E_FAIL
  18. flask基础知识
  19. java 枚举 封装操作方法
  20. Hadoop集群WordCount运行详解(转)

热门文章

  1. time_t和difftime
  2. ASP:连接Access数据库的方法及使用感受
  3. 洛谷 P1020 导弹拦截(dp+最长上升子序列变形)
  4. 【题解】亚瑟王 HNOI 2015 BZOJ 4008 概率 期望 动态规划
  5. 门店评级VS坏客户
  6. FastDFS整合nginx后,nginx一直报错
  7. java序列化深拷贝【转】
  8. Html-Css 从入门到放弃(一)基础知识
  9. java中生成验证码,以及验证码的使用
  10. python 小程序,在列表中找到所有指定内容的位置