https://acm.hdu.edu.cn/showproblem.php?pid=1573

n组线性同余方程求解,最后求出多少解。而最终的解的周期为最小公倍数,范围内的,需要这样算。如果最小超过,那么直接是0,如果无解为0,如果最小为0,那么直接为k个lcm,否则要加上自身的1,因为要求为正整数解。

 1 #include<bits/stdc++.h>
2 using namespace std;
3 typedef long long ll;
4 ll t,n,m,a1,b1,a2,b2,c,k,ans;
5 const int N=52;
6 ll s[N],r[N];
7 ll ex_gcd(ll a,ll b,ll &x,ll &y)
8 {
9 if(!b){x=1,y=0;return a;};
10 ll d=ex_gcd(b,a%b,x,y);
11 ll tmp=x;
12 x=y,y=tmp-a/b*y;
13 return d;
14 }
15 int main()
16 {
17 scanf("%lld",&t);
18 while(t--)
19 {
20 ll x,y,a,b;
21 bool flag=true;
22 scanf("%lld%lld",&n,&m);
23 for(int i=1;i<=m;i++) scanf("%lld",&s[i]);
24 for(int i=1;i<=m;i++) scanf("%lld",&r[i]);
25 a1=s[1],b1=r[1];
26 for(int i=2;i<=m;i++)
27 {
28 a2=s[i],b2=r[i];
29 a=a1,b=a2,c=b2-b1;
30 ll d=ex_gcd(a,b,x,y);
31 if(c%d!=0) {cout<<0<<'\n';flag=0;break;}
32 k=b/d;
33 x=(x*(c/d)%k+k)%k;
34 b1=a1*x+b1;
35 a1=a1*(a2/d);
36 }
37 if(flag)
38 {
39 if(n-b1<0) cout<<0<<'\n';
40 else
41 {
42 ans=(n-b1)/a1+(b1!=0);
43 cout<<ans<<'\n';
44 }
45 }
46 }
47 return 0;
48 }

最新文章

  1. postman+newman(2)
  2. 11G RAC 中 OCR 及Voting Disk 相关操作
  3. java多次替换(replace不行)
  4. A Mathematical Curiosity 分类: HDU 2015-06-25 21:27 11人阅读 评论(0) 收藏
  5. recv send 阻塞和非阻塞
  6. winform实现自动更新并动态调用form实现
  7. udp通信C++实现的细节
  8. 【转】基于Ubuntu 14.04 LTS编译Android4.4.2源代码
  9. cadence遇到的问题(持续更新)
  10. Qt qss一些伪装态,以及margin与padding区别
  11. 关于String.concat()方法和StringBuffer.append()方法的学习:方法是如何追加字符到源字符串的
  12. linux c coding style
  13. Get Cordova Ready for Grunt and CoffeeScript
  14. 关于埃博拉(Ebola)基础研究病毒
  15. GPU渲染管线概述
  16. 记一次504 Gateway Time-out
  17. jquery 查找子窗口
  18. 创建JUtil
  19. 【转】C++标准转换运算符reinterpret_cast
  20. HDU - 1260 (Tickets)

热门文章

  1. Python matplotlib绘图设置坐标轴的标题
  2. 为什么要用urlencode()函数进行url编码
  3. CF667A Pouring Rain 题解
  4. 使用WebUploader进行文件图片上传
  5. 【Tools】VS搭建Qt开发环境
  6. c++设计模式概述之组合(composite)
  7. cmake之Visual studio无法显示头文件
  8. LeetCode每日一题打卡组队监督!刷题群!
  9. 【LeetCode】400. Nth Digit 解题报告(Python)
  10. 【LeetCode】372. Super Pow 解题报告(Python)