HDU1573 X问题【扩展欧几里得算法】
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问题【扩展欧几里得算法】相关推荐
- 扩展欧几里得算法_扩展欧几里得递推算法
欧几里得算法 表示 整数 a 与 b 的最大公约数. 若 t = a % b, 则 证明略. 递推版 gcd 算法 gcd 接受变量元组 (a, b) 作为输入,输出最大公约数 (r). 我们很难直接 ...
- 欧几里得算法扩展欧几里得算法
欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b). ...
- 如何利用扩展欧几里得算法求解不定方程_客户端不用的算法系列:从头条笔试题认识扩展欧几里得算法...
难度较高,阅读时间大概 28 分钟 这是数论的第二篇,在<素数筛法>中,我们重温了素数这个数学定义,并且给出了区别于教科书上更高效的 Eratosthenes 筛法和欧拉线性筛.这篇文会从 ...
- Codeforces 1106F Lunar New Year and a Recursive Sequence (数学、线性代数、线性递推、数论、BSGS、扩展欧几里得算法)...
Codeforces 1106F Lunar New Year and a Recursive Sequence (数学.线性代数.线性递推.数论.BSGS.扩展欧几里得算法) 哎呀大水题..我写了一 ...
- POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法)
POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法) 手动博客搬家: 本文发表于20180226 23:35:26, 原地址https://blog.csdn ...
- GCD LCM 欧几里得算法 扩展欧几里得算法
欧几里得算法: 辗转相除法的关键恒等式:gcd(a,b)=gcd(b,a mod b); 边界条件:gcd(a,0)=a; //最大公约数 int gcd(int a,int b) {return b ...
- 欧几里得算法和扩展欧几里得算法(Euclidean_Algorithm and Extended_Euclidean_Algorithm)
一.基本概念 欧几里得算法:又名辗转相除法,计算两个整数a,b的最大公约数. 扩展欧几里得算法:对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y ...
- 2018/7/31 -zznu-oj -问题 C: 磨刀- 【扩展欧几里得算法的基本应用】
问题 C: 磨刀 时间限制: 1 Sec 内存限制: 128 MB 提交: 190 解决: 39 [提交] [状态] [讨论版] [命题人:admin] 题目描述 磨刀是一个讲究的工作,只能在n℃ ...
- 扩展欧几里得算法 POJ 1061
根据此题 整理下 扩展欧几里得 扩展欧几里得是用来判断并求 ax + by = c 是否有解及其解的数学算法 首先列出定理 1.ax + by = gcd(a,b) 2.gcd(a,b) = gcd( ...
最新文章
- 【廖雪峰python进阶笔记】定制类
- 翻译下 golang package time
- 是否保证Python列表的元素保持按插入顺序排列?
- 借助液态金属传感器和AI,这次机械手可能真的找到感觉了
- Windows Vista 交互式服务编程
- Tensorlfow2.0 二分类和多分类focal loss实现和在文本分类任务效果评估
- python下标从0开始_从零学Python之入门(三)序列
- C++知识分享之STL容器:set 容器与 map 容器的简单应用
- 辽宁职称计算机和英语考试,2018年辽宁职称计算机报考有哪些要求?
- 腾讯 Tars-Go 服务获取自定义模版(配置)值
- SecureCRT中解决乱码的问题
- jhipster初接触
- java经典项目_推荐几个经典的Java开源项目
- lcl手术和飞秒区别_全飞秒、半飞秒、ICL、TPRK...教你分清近视手术区别
- Android获取缓存大小和清除缓存功能实现
- pq分解法matlab编程,基于MATLAB的PQ分解法电力系统潮流计算.doc
- 腾讯通、第一企信、imo云办公室、263云通信哪家强
- 三星s8 android版本,三星S8系列国行获安卓8.0更新 用户泪奔
- 深度学习常用算子(一)
- 数据分析-C端与B端数据分析的异同