P1082 同余方程(拓展欧几里德)】的更多相关文章

模板,,, #include<cstdio> using namespace std; void exgcd(long long a,long long b,long long &x,long long &y){ if (b==0) {x=1; y=0;} else {exgcd(b,a%b,x,y); int t=y; y=x-a/b*y; x=t;} } int main(){ long long a,b,x,y; scanf("%lld %lld\n"…
题意:Kiki 有 X 个硬币,已知 N 组这样的信息:X%x=Ai , X/x=Mi (x未知).问满足这些条件的最小的硬币数,也就是最小的正整数 X. 解法:转化一下题意就是 拓展欧几里德求解同余方程组了.我们可以得到 N 个方程:Mi*x+Ai=X.一些解释请看下面的代码. 1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 using na…
题目:求在小于等于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=ax+b,再调整 x 来求得 X 的解的个数.一些解释请看下面的代码. 注意--每次联立方程后求最小正整数解,可以提高代码速度. 1 #include<cstdio> 2 #i…
题意:Elina看一本刘汝佳的书(O_O*),里面介绍了一种奇怪的方法表示一个非负整数 m .也就是有 k 对 ( ai , ri ) 可以这样表示--m%ai=ri.问 m 的最小值. 解法:拓展欧几里德求解同余方程组的最小非负整数解.(感觉挺不容易的......+_+@) 先看前2个关系式:                       m%a1=r1 和 m%a2=r2 →                                                           …
题意:已知2只青蛙的起始位置 a,b 和跳跃一次的距离 m,n,现在它们沿着一条长度为 l 的纬线(圈)向相同方向跳跃.问它们何时能相遇?(好有聊的青蛙 (΄◞ิ౪◟ิ‵) *)永不相遇就输出"Impossible".(蠢得可怜 -_-!) 解法:用拓展欧几里德求同余方程的最小正整数解.(a+mx)-(b+nx)=k*l (k表示圈数) → (m-n)x=k*l+b-a → (m-n)x=b-a(mod l).当然其实=(b-a)%l 更准确,但反正都是模,也没有关系啦.于是就像上题一…
题意:有一个在k位无符号整数下的模型:for (variable = A; variable != B; variable += C)  statement; 问循环的次数,若"永不停息"(←_←)*,就输出"FOREVER". 解法:用拓展欧几里德方法求出gcd最大公因数,再利用同余性质转化,求同余方程,或者不定方程.其中题目可化为 a+cx=b(mod 2^k) → cx=b-a(mod 2^k),求最小正整数解.也是求解同余方程. 先将方程化为一般形式:ax=…
题意:给出 A%9973 和 B,求(A/B)%9973的值. 解法:拓展欧几里德求逆元.由于同余的性质只有在 * 和 + 的情况下一直成立,我们要把 /B 转化为 *B-1,也就是求逆元. 对于 B-1,P为模数9973,那么 B*B-1=1(mod P)  →  把 B-1 看成 x ,就是 Bx+Py=1.也就是求不定方程的解了.x 就是 B-1,答案就是 ((A%9973)*(x%9973))%9973 . P.S.关于拓展欧几里德求解不定方程的具体解释请见--[poj 2115]C L…
1965: [Ahoi2005]SHUFFLE 洗牌 Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 541  Solved: 326[Submit][Status][Discuss] Description 为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学家们要在飞船中度过相当长的一段时间,小联提议用扑克牌打发长途旅行中的无聊时间.玩了几局之后,大家觉得单纯玩扑克…
//数据是有多水 连 10^10的枚举都能过 关于拓展欧几里德:大概就是x1=y2,y1=x2-[a/b]y2,按这个规律递归到gcd(a,0)的形式,此时公因数为a,方程也变为a*x+0*y=gcd(a,0)的形式,显然解为x=1,y=0,然后再递归回去就能得到解(a*x+b*y=gcd(a,b)的解) #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #incl…
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3321 题意: 有个裁判出的题太难,总是没人做,所以他很不爽.有一次他终于忍不住了,心想:“反正我的题没人做,我干嘛要费那么多心思出题?不如就输入一个随机数,输出一个随机数吧.”于是他找了3个整数x1.a和b,然后按照递推公式xi = (a * x(i-1) + b) mod 100…
P1082 同余方程 题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正整数 x0,即最小正整数解.输入数据保证一定有解. 输入输出样例 输入样例#1: 3 10 输出样例#1: 7 说明 [数据范围] 对于 40%的数据,2 ≤b≤ 1,000: 对于 60%的数据,2 ≤b≤ 50,000,000: 对于 100%的数据,2 ≤a, b≤ 2,…
链接:传送门 思路:拓展欧几里德模板题,设大圣至少翻转 t 次,大圣起始位置为 x ,大圣目标位置为 y + n * s ( 大圣到达目标位置 y 可能需要多圈,所以用 s 来表示圈数 ),因为只能逆时针翻转所以可以得到一个方程 x + D * t = y + n * s ( 使用D与d区分 ),将方程转换一下可以得到 D * t + n * s = y - x,求出 t 的最小正整数解即可,拓欧模板. /*********************************************…
P1082 同余方程 题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正整数 x0,即最小正整数解.输入数据保证一定有解. 输入输出样例 输入样例#1: 3 10 输出样例#1: 7 说明 [数据范围] 对于 40%的数据,2 ≤b≤ 1,000: 对于 60%的数据,2 ≤b≤ 50,000,000: 对于 100%的数据,2 ≤a, b≤ 2,…
题目描述 求关于xx的同余方程 a x \equiv 1 \pmod {b}ax≡1(modb) 的最小正整数解. 输入输出格式 输入格式: 一行,包含两个正整数 a,ba,b,用一个空格隔开. 输出格式: 一个正整数 x_0x0​,即最小正整数解.输入数据保证一定有解. 输入输出样例 输入样例#1: 复制 3 10 输出样例#1: 复制 7 说明 [数据范围] 对于 40%的数据,2 ≤b≤ 1,0002≤b≤1,000: 对于 60%的数据,2 ≤b≤ 50,000,0002≤b≤50,00…
题目链接:https://www.luogu.com.cn/problem/P1082 题目大意: 求关于 \(x\) 的同余方程 ax≡1(mod b) 的最小正整数解. 告诉你 \(a,b\) 求 \(x\). 解题思路: 直接套扩展GCD模板. 实现代码如下: #include <bits/stdc++.h> using namespace std; typedef long long ll; void gcd(ll a , ll b , ll &d , ll &x ,…
题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正整数 x0,即最小正整数解.输入数据保证一定有解. 输入输出样例 输入样例#1: 3 10 输出样例#1: 7 说明 [数据范围] 对于 40%的数据,2 ≤b≤ 1,000: 对于 60%的数据,2 ≤b≤ 50,000,000: 对于 100%的数据,2 ≤a, b≤ 2,000,000,000…
题目链接: 传送门 青蛙的约会 Time Limit: 1000MS     Memory Limit: 65536K Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置.不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的.但是除非这两只青蛙在同一时间跳到同一点上,不然是永…
题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正整数 x0,即最小正整数解.输入数据保证一定有解. #include<iostream> #include<cstring> #include<cstdio> #include<cstdlib> #include<cmath> #include<…
题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正整数 x0,即最小正整数解.输入数据保证一定有解. 输入输出样例 输入样例#1: 3 10 输出样例#1: 7 说明 [数据范围] 对于 40%的数据,2 ≤b≤ 1,000: 对于 60%的数据,2 ≤b≤ 50,000,000: 对于 100%的数据,2 ≤a, b≤ 2,000,000,000…
http://acm.hdu.edu.cn/showproblem.php?pid=2815 题意:裸题... 关于拓展BSGS的详细解释我写了一篇博文:http://www.cnblogs.com/KonjakJuruo/p/5178600.html 题解:又有一个坑,就是N>=P的时候输出无解. #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #incl…
http://poj.org/problem?id=3243 题意:给定X,Z,K,求一个最小的Y满足XY mod Z = K. 关于拓展BSGS的详细解释我写了一篇博文:http://www.cnblogs.com/KonjakJuruo/p/5178600.html 题解:BSGS的拓展版本(因为X和Z不一定互质).这道题挺坑的,如果K>=Z不是输出无解而是让K%=Z. 算是BSGS的模板题,我打了两种版本,就是二分查找和hash.对比两次提交来看,二分省空间,耗时间:Hash省时间,耗空间…
数论题..所有数论对我来说都很恶心..不想再说什么了.. ------------------------------------------------ #include<iostream>   using namespace std;   void gcd(int a,int b,int &x,int &y) { if(!b) { x=1; y=0; } else { gcd(b,a%b,x,y); int t=x; x=y; y=t-a/b*x; } }   int ma…
题目传送门 [题目大意] 求关于x的同余方程 ax≡1(mod b)的最小整数解. [思路分析] 由同余方程的有关知识可得,ax≡1(mod b)可以化为ax+by=1,此方程有解当且仅当gcd(a,b)=1,于是就可以用欧几里得算法求出一组特解x0,y0. 那么x0就是原方程的一个解,通解则为所有模b与x0同余的整数,通过取模操作可以把解的取值范围移动到1-b之间,这样就得到了最小整数解. [代码实现] #include<bits/stdc++.h> #define ll long long…
题目链接 这道题求关于x的同余方程ax≡1(mod b)的最小正整数解.换而言之方程可以转换为ax+by=1,此时有y为负数.此时当且仅当gcd(a,b)|1时,方程有整数解. 于是乎这道题就变成了ax+by=gcd(a,b)即扩展欧几里得问题.如何解决这个问题呢? 由gcd的基本性质可以得出:gcd(b,a%b)=gcd(a,b),这个值我们设为g.既有ax+by=g,bx1+(a%b)y1=g,变形得,bx1+(a-a/b*b)y1=g,展开得ay1+b(x1-y1*a/b)=g,此时显而易…
题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正整数 x0,即最小正整数解.输入数据保证一定有解. 输入输出样例 输入样例#1: 3 10 输出样例#1: 7 说明 [数据范围] 对于 40%的数据,2 ≤b≤ 1,000: 对于 60%的数据,2 ≤b≤ 50,000,000: 对于 100%的数据,2 ≤a, b≤ 2,000,000,000…
最近一直在学习数论,讲得很快,害怕落实的不好,所以做一道luogu的同余方程练练手. 关于x的同余方程 ax ≡ 1 mod m 那么x其实就是求a关于m的乘法逆元 ax + my = 1 对于这个不定方程的全部解是 { x = x0 + m/gcd(a,m) { y = y0 - a/gcd(a,m) 我们可以用exgcd来求出其中的一组特解x0 那么什么是exgcd? 先不考虑exgcd,假设当前我们要处理的是求出 a 和 b的最大公约数,并求出 x 和 y 使得 a*x + b*y= gc…
题目:https://www.luogu.org/problemnew/show/P1082 用 exgcd 即可. 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int a,b; int gcd(int a,int b){return b?gcd(b,a%b):a;} void exgcd(int a,…
题意 题解 做了这道题,发现扩欧快忘了. 根据题意可以很快地列出线性同余方程. 设跳了k次 x+mkΞy+nk(mod l) (m-n)kΞ-(x-y)(mod l) 然后化一下 (m-n)k+(x-y)Ξ0(mod l) 也就是前面一坨是l的倍数 不妨设 (m-n)k+(x-y)=-tl (m-n)k+tl=-(x-y) 我们要求的就是保证t<=0(因为我们设的-t倍的l,所以t<=0),k>=0时k的最小值 发现这是一个不定方程 根据裴蜀定理(这个定理搜狗输入法上没有) 当-(x-y…
题意:有两只青蛙,在一个圆上顺时针跳,问最少的相遇时间.   这个是同余方程的思路.可列出方程:(m-n)* X% L = y-x(mod L) 简化为 a * x = b (mod L)    (1)判断是否有解 ,b % gcd(a,L) == 0 ,有得解. (2)求通解下的最小正整数解,就是通解对(L / gcd(a, L) ) 取模.   #include <iostream> #include <algorithm> #include <cstring> #…
题目描述 求关于 x的同余方程 ax≡1(modb) 的最小正整数解. 输入格式 一行,包含两个正整数 a,ba,b,用一个空格隔开. 输出格式 一个正整数 x,即最小正整数解.输入数据保证一定有解. #include<queue> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; inline int ex…