X问题
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 10234 Accepted Submission(s): 3735

Problem Description
求在小于等于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)。

Input
输入数据的第一行为一个正整数T,表示有T组测试数据。每组测试数据的第一行为两个正整数N,M (0 < N <= 1000,000,000 , 0 < M <= 10),表示X小于等于N,数组a和b中各有M个元素。接下来两行,每行各有M个正整数,分别为a和b中的元素。

Output
对应每一组输入,在独立一行中输出一个正整数,表示满足条件的X的个数。

Sample Input
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

Sample Output
1
0
3

Author
lwg

Source
HDU 2007-1 Programming Contest

问题链接:HDU1573 X问题
问题简述:(略)
问题分析:扩展欧几里得算法问题,模板题,不解释。
程序说明:(略)
参考链接:(略)
题记:(略)

AC的C++语言程序如下:

/* HDU1573 X问题 */#include <bits/stdc++.h>using namespace std;typedef long long LL;void exgcd(LL a, LL b, LL &d, LL &x, LL &y)
{if (b) {exgcd(b, a % b, d, x, y); LL t = x; x = y; y = t - a / b * y;}else {x = 1; y = 0; d = a;}
}const int M = 10;
int a[M], b[M];int main()
{int t;scanf("%d", &t);while (t--) {int n, m;scanf("%d%d", &n, &m);for (int i = 0; i < m; i++) scanf("%d", &a[i]);for (int i = 0; i < m; i++) scanf("%d", &b[i]);LL a0 = a[0], b0 = b[0], x, y, d;int flag = 1;for (int i = 1; i < m; i++) {exgcd(a0, a[i], d, x, y);if ((b[i] - b0) % d != 0) {flag = 0; break;}LL tmp = a[i] / d;x = x * (b[i] - b0) / d;x = (x % tmp + tmp) % tmp;b0 = b0 + a0 * x;a0 = a0 * tmp;}LL ans = 0;if (flag == 0 || n < b0);else {ans = (n - b0) / a0 + 1;if (b0 == 0) ans--;}printf("%lld\n", ans);}return 0;
}

HDU1573 X问题【扩展欧几里得算法】相关推荐

  1. 扩展欧几里得算法_扩展欧几里得递推算法

    欧几里得算法 表示 整数 a 与 b 的最大公约数. 若 t = a % b, 则 证明略. 递推版 gcd 算法 gcd 接受变量元组 (a, b) 作为输入,输出最大公约数 (r). 我们很难直接 ...

  2. 欧几里得算法扩展欧几里得算法

    欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b). ...

  3. 如何利用扩展欧几里得算法求解不定方程_客户端不用的算法系列:从头条笔试题认识扩展欧几里得算法...

    难度较高,阅读时间大概 28 分钟 这是数论的第二篇,在<素数筛法>中,我们重温了素数这个数学定义,并且给出了区别于教科书上更高效的 Eratosthenes 筛法和欧拉线性筛.这篇文会从 ...

  4. Codeforces 1106F Lunar New Year and a Recursive Sequence (数学、线性代数、线性递推、数论、BSGS、扩展欧几里得算法)...

    Codeforces 1106F Lunar New Year and a Recursive Sequence (数学.线性代数.线性递推.数论.BSGS.扩展欧几里得算法) 哎呀大水题..我写了一 ...

  5. POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法)

    POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法) 手动博客搬家: 本文发表于20180226 23:35:26, 原地址https://blog.csdn ...

  6. GCD LCM 欧几里得算法 扩展欧几里得算法

    欧几里得算法: 辗转相除法的关键恒等式:gcd(a,b)=gcd(b,a mod b); 边界条件:gcd(a,0)=a; //最大公约数 int gcd(int a,int b) {return b ...

  7. 欧几里得算法和扩展欧几里得算法(Euclidean_Algorithm and Extended_Euclidean_Algorithm)

    一.基本概念 欧几里得算法:又名辗转相除法,计算两个整数a,b的最大公约数. 扩展欧几里得算法:对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y ...

  8. 2018/7/31 -zznu-oj -问题 C: 磨刀- 【扩展欧几里得算法的基本应用】

    问题 C: 磨刀 时间限制: 1 Sec  内存限制: 128 MB 提交: 190  解决: 39 [提交] [状态] [讨论版] [命题人:admin] 题目描述 磨刀是一个讲究的工作,只能在n℃ ...

  9. 扩展欧几里得算法 POJ 1061

    根据此题 整理下 扩展欧几里得 扩展欧几里得是用来判断并求 ax + by = c 是否有解及其解的数学算法 首先列出定理 1.ax + by = gcd(a,b) 2.gcd(a,b) = gcd( ...

最新文章

  1. 【廖雪峰python进阶笔记】定制类
  2. 翻译下 golang package time
  3. 是否保证Python列表的元素保持按插入顺序排列?
  4. 借助液态金属传感器和AI,这次机械手可能真的找到感觉了
  5. Windows Vista 交互式服务编程
  6. Tensorlfow2.0 二分类和多分类focal loss实现和在文本分类任务效果评估
  7. python下标从0开始_从零学Python之入门(三)序列
  8. C++知识分享之STL容器:set 容器与 map 容器的简单应用
  9. 辽宁职称计算机和英语考试,2018年辽宁职称计算机报考有哪些要求?
  10. 腾讯 Tars-Go 服务获取自定义模版(配置)值
  11. SecureCRT中解决乱码的问题
  12. jhipster初接触
  13. java经典项目_推荐几个经典的Java开源项目
  14. lcl手术和飞秒区别_全飞秒、半飞秒、ICL、TPRK...教你分清近视手术区别
  15. Android获取缓存大小和清除缓存功能实现
  16. pq分解法matlab编程,基于MATLAB的PQ分解法电力系统潮流计算.doc
  17. 腾讯通、第一企信、imo云办公室、263云通信哪家强
  18. 三星s8 android版本,三星S8系列国行获安卓8.0更新 用户泪奔
  19. 深度学习常用算子(一)
  20. 数据分析-C端与B端数据分析的异同

热门文章

  1. 计算一棵树的深度和宽度[Treeview的深度和宽度](多题头的表格问题解决的基础)...
  2. 2018-09-29 摘抄eDP取代LVDS视频接口
  3. 感谢贫穷,是贫穷限制了人们的善良
  4. oracle——服务器同时安装服务端和客户端冲突
  5. arcgis图层叠加不匹配
  6. 浅谈Flutter UI布局
  7. Visual C# .Net 环境中编程实现浮动工具栏
  8. 使用C#调用非托管DLL函数
  9. Spring MVC中静态资源加载
  10. 判断数据是增量分区全量分区