链接:

https://vjudge.net/problem/HDU-1573

题意:

求在小于等于N的正整数中有多少个X满足:X mod a[0] = b[0], X mod a[1] = b[1], X mod a[2] = b[2], …, X mod a[i] = b[i], … (0 < a[i] <= 10)。

思路:

解线性同余方程组,得到\(x+k*m \leq n\)。

解为\(1+(n-x)/m\)。

当x为0时答案要减一。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<math.h>
#include<vector> using namespace std;
typedef long long LL;
const int INF = 1e9; const int MAXN = 1e6+10; LL a, b, c, k, n, lcm;
int m;
LL M[20], A[20]; LL ExGcd(LL a, LL b, LL &x, LL &y)
{
if (b == 0)
{
x = 1, y = 0;
return a;
}
LL d = ExGcd(b, a%b, x, y);
LL tmp = x;
x = y;
y = tmp - (a/b)*y;
return d;
} LL ExCRT()
{
LL res = A[1], mod = M[1];
LL x, y, gcd;
for (int i = 2;i <= m;i++)
{
gcd = ExGcd(mod, M[i], x, y);
if ((A[i]-res)%gcd)
return -1;
x = (x*(A[i]-res))/gcd;
x = (x%(M[i]/gcd)+(M[i]/gcd))%(M[i]/gcd);
res = res+mod*x;
mod = (mod*M[i])/gcd;
res %= mod;
}
lcm = mod;
return res;
} int main()
{
int t;
scanf("%d", &t);
while(t--)
{
scanf("%lld%d", &n, &m);
for (int i = 1;i <= m;i++)
scanf("%lld", &M[i]);
for (int i = 1;i <= m;i++)
scanf("%lld", &A[i]);
LL res = ExCRT();
if (res == -1 || res > n)
puts("0");
else
{
printf("%lld\n", (n-res)/lcm+(res!=0));
}
} return 0;
}

最新文章

  1. SQL Server 存储过程生成insert语句
  2. Web 开发人员系统重装备忘录
  3. 第五章项目:QuickHit
  4. 前后数据交互(ajax) -- 初始化页面表格
  5. 【转】wireshark过滤规则
  6. Linux脚本
  7. WordPress批量修改文章内容、URL链接、文章摘要
  8. hdu 1159 Common Subsequence(LCS最长公共子序列)
  9. html5 canvas 实现简单的画图
  10. maven overlays 合并多个war
  11. 虚拟数据库_json_ajax
  12. 【Unity3D与23种设计模式】模板方法模式(Template Method)
  13. Toad for Oracle 创建表空间和用户
  14. 模拟Oracle行迁移和行链接
  15. C语言的三目运算符(x=a?b:c):条件运算符
  16. make 命令【转】
  17. js 图片无缝滚动
  18. 3,EasyNetQ-发布/订阅
  19. 【硅谷问道】Chris Lattner 访谈录(上)
  20. OC Copy基本使用(深拷贝和浅拷贝)

热门文章

  1. kafka为什么吞吐量高,怎样保证高可用
  2. AVL排序二叉树树
  3. python 之 数据库(创建表的完整语法、基本数据类型)
  4. Go实战--golang中使用redis(redigo和go-redis/redis)
  5. Webpack将静态资源拷贝并压缩至输出文件夹
  6. 简单即时通讯、聊天室--java NIO版本
  7. logback日志无法按日期分割的问题
  8. C# 、子窗体调用父窗体属性、方法
  9. C#笔试题目总结
  10. 如何将SolidWorks文件另存为.obj文件及如何打开.obj格式文件