Luogu P1082 同余方程(exgcd模版)】的更多相关文章

最近一直在学习数论,讲得很快,害怕落实的不好,所以做一道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,…
传送门 求ax%b = 1,即ax - by = 1: 很明显这是一个exgcd的形式. 那么要做这道题,首先需要gcd和exgcd的算法作铺垫. gcd(辗转相膜法): int gcd(int a,int b){ ){ return a; } return gcd(b,a%b); } exgcd就是在求出gcd的基础上,求出ax+by = gcd(a,b)的一组x,y的解: int exgcd(int a,int &x,int b,int &y){ ){ x = ; y = ; retu…
题目传送门 [题目大意] 求关于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(modb) 的最小正整数解. 输入格式 一行,包含两个正整数 a,ba,b,用一个空格隔开. 输出格式 一个正整数 x,即最小正整数解.输入数据保证一定有解. #include<queue> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; inline int ex…
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,…
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,…
嗯... 题目链接:https://www.luogu.org/problem/P1082 这道题很明显涉及到了同余和exgcd的问题,下面推导一下: 首先证明有解情况: ax + by = m有解的必要条件是 m mod gcd(a, b) = 0 a为gcd(a, b)的倍数,b为gcd(a, b)的倍数,x.y为整数, 所以ax + by是gcd(a, b)的倍数,所以m是gcd(a, b)的倍数 然后证明a.b互质(下面会用到): 本题中1 mod gcd(a, b) = 0,所以gcd…
题目传送门 解题思路: 因为推导过程过于复杂,懒得写,所以题解传送门 AC代码: #include<iostream> #include<cstdio> using namespace std; long long a,b,x,y; void exgcd(long long p,long long o) { ) { x = ; y = ; return ; } exgcd(o,p % o); long long tx = x; x = y; y = tx - p / o * y;…
题目:https://www.luogu.org/problemnew/show/P1082 大水题. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int a,b,x,y; void exgcd(int a,int b,int &x,int &y) { ;y=;return;} exgcd(b,a%…
https://www.luogu.org/problem/P1082 #include <iostream> #include <cstdio> #include <queue> #include <algorithm> #include <cmath> #include <cstring> #define inf 2147483647 #define N 1000010 #define p(a) putchar(a) #defin…
题目链接: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.…
题目描述 求关于 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…
题目描述 求关于 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…
题目描述 求关于 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…
第一步,和同余方程一样,转化一下 两式相减得 这就转化为了求不定方程,用exgcd 求出x,要化成最小正整数解,避免溢出 然后可以求出P出来. 这个时候要把前两个式子转化成一个式子 设求出来的是P' 则有  这个就转化成了新的m1和b1 然后就一直求下去即可 最终b1就是答案 #include<bits/stdc++.h> #define REP(i, a, b) for(register int i = (a); i < (b); i++) #define _for(i, a, b)…
题目描述 求关于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…
题意:Elina看一本刘汝佳的书(O_O*),里面介绍了一种奇怪的方法表示一个非负整数 m .也就是有 k 对 ( ai , ri ) 可以这样表示--m%ai=ri.问 m 的最小值. 解法:拓展欧几里德求解同余方程组的最小非负整数解.(感觉挺不容易的......+_+@) 先看前2个关系式:                       m%a1=r1 和 m%a2=r2 →                                                           …
题意:给定a,b,求$ax \equiv 1 \pmod b$的最小正整数解x,保证有解 exgcd:求$ax+by=gcd(a,b)$的 一组解x,y 首先根据正常的gcd可得出   $gcd(a,b)=gcd(b,a\%b)$ 假设我们已经得到了一组解x' y' 则 $bx'+(a\%b)y'=gcd(b,a\%b)$ 则 $ax+by=gcd(a,b)=gcd(b,a\%b)=bx'+(a\%b)y'$ 而且$a\%b=a-\lfloor\frac{a}{b}\rfloor*b$ 所以$a…
求x的最小正整数解,使得ax=b(mod m) 那么显然ax - b = m * y ax - my = b 那么就套入Ax+By = K的不定方程中,然后用exgcd求解即可 但这道题求最大正整数解,对于一组解,有这样一个推论 x = x0 +k*(b/gcd(a,b)) y = y0-k*(a/gcd(a,b)) k为任意正整数 可以带入方程中算一下,依然满足方程. 那么也就是说x的变化幅度为b / gcd(a,b) 令d = gcd(a,b), B = b 那么最小正整数解就是 (x *…
每日一题 day31 打卡 Analysis 题目问的是满足 ax mod b = 1 的最小正整数 x.(a,b是正整数) 但是不能暴力枚举 x,会超时. 把问题转化一下.观察 ax mod b = 1,它的实质是 ax + by = 1:这里 y 是我们新引入的某个整数,并且似乎是个负数才对.这样表示是为了用扩展欧几里得算法.我们将要努力求出一组 x,y 来满足这个等式.稍微再等一下—— 问题还需要转化.扩展欧几里得是用来求 ax + by = gcd(a,b) 中的未知数的,怎么牵扯到等于…
关于扩展欧几里得从寒假时就很迷,抄题解过了同余方程,但是原理并不理解. 今天终于把坑填上了qwq. 由于本人太菜,不会用markdown,所以这篇总结是手写的(什么).(字丑不要嫌弃嘛) ********Update9.28********** 刚刚我们求出的是一组特值,那么如何求通值? 约定:设x0,y0为一组特解,t为任意整数,设a>b(不行再交换) 那么有 x=x0+b/gcd*t y=y0-a/gcd*t ******************************* 奉上三道例题: E…
手动博客搬家: 本文发表于20180226 23:35:26, 原地址https://blog.csdn.net/suncongbo/article/details/79382991 题目链接: (poj)http://poj.org/problem?id=1061 (bzoj)http://www.lydsy.com/JudgeOnline/problem.php?id=1477 (Luogu)https://www.luogu.org/problemnew/show/P1516 数据强度对比…
%%lkx 学习博客 exgcd(扩展欧几里得) 可以用来判断并求解形如\(ax+by=c\)的方程,当且仅当\(gcd(a,b)|c\)时,存在整数解\(x,y\) 也就是说,\(exgcd\)可以用来求解方程\(ax+by=gcd(a,b)\),令\(a=b,b=a\%b\)则有方程\(b*x_1+(a\%b)*y_1=gcd(b,a\% b)\) 又因为\(gcd(a,b)=gcd(b,a\%b)\),且\(a\%b=a-b*\) \(\lfloor {a/b}\rfloor * y_1=…
一.前言 本博客适合已经学会欧几里得算法的人食用~~~ 二.扩展欧几里得算法 为了更好的理解扩展欧几里得算法,首先你要知道一个叫做贝祖定理的玄学定理: 即如果a.b是整数,那么一定存在整数x.y使得$ax+by=gcd(a,b)$. 通俗的说就是:如果$ax+by=c$有解,那么$c\%gcd(a,b)=0$ 扩展欧几里得算法就是来求解$ax+by=c$这个方程的(判断有无解仅需使用欧几里得算法即可). 我们不妨从递归到底的情况来入手. 当$b==0$时,显然有: $\begin{cases}x…
dalao们真是太强了,吊打我无名蒟蒻 我连题解都看不懂,在此篇题解中,我尽量用语言描述,不用公式推导(dalao喜欢看公式的话绕道,这篇题解留给像我一样弱的) 进入正题 如果不会扩展欧里几德的话请先去做 洛谷 p1082 同余方程 设跳了k次 所以km - kn + x - y = 0(mod l) 所以k(m - n) + h * l = y - x 这个移项应该没问题吧 设(m - n)为a,k为x,h为y, l为b,(y - x)为m 那么转换为ax + by = m 根据裴蜀定理ax…
做了几天远古老题,发现不可做,于是咕掉..转而从2005开始.. 1997: P1549 棋盘问题(2):搜索,优化搜索顺序,对于第一行第一列先搜小的(但是其实这样是错的,仅仅能过原题) 加强版咕. 1998: P1011 车站:类似斐波那契,推式子即可. P1012 拼数:sort cmp:a+b>b+a P1013 进制位:观察性质发现,一定是n-1进制. 原因:若进制 <n-1 会出现重复字母,若进制 >n-1 则不会进位导致出现更大的数. 判断一个数字是什么: 其实就是这样 19…
2012d1t1 密码 模拟题 #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<iostream> #include<algorithm> #include<set> #include<queue> #include<vector> using namespace std; ; ][]; ?…