扩展欧几里得noip2012同余方程

减维 减维     2022-09-24     469

关键词:

题目描述

求关于 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。

NOIP 2012 提高组 第二天 第一题

题解

顺便把欧几里得算法也写上了

证明:

其实欧几里得算法就是辗转相除法。。。

扩展欧几里得就是

对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然
 
存在整数对 x,y ,使得 gcd(a,b)=ax+by。
 
求解 x,y的方法的理解
 
设 a>b。
 
1,显然当 b=0,gcd(a,b)=a。此时 x=1,y=0;
 
2,a>b>0 时
 
设 ax1+ by1= gcd(a,b);
 
bx2+ (a mod b)y2= gcd(b,a mod b);
 
根据朴素的欧几里德原理有 gcd(a,b) = gcd(b,a mod b);
 
则:ax1+ by1= bx2+ (a mod b)y2;
 
即:ax1+ by1= bx2+ (a - [a / b] * b)y2=ay2+ bx2- [a / b] * by2;
 
也就是ax1+ by1 == ay2+ b(x2- [a / b] *y2);
 
根据恒等定理得:x1=y2; y1=x2- [a / b] *y2;
 
这样我们就得到了求解 x1,y1 的方法:x1,y1 的值基于 x2,y2.
 
上面的思想是以递归定义的,因为 gcd 不断的递归求解一定会有个时候 b=0,所以递归可以结束。

代码

 

//by 减维
#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<map>
#include<bitset>
#include<algorithm>
#define ll long long
#define maxn
using namespace std;

ll n,m;

ll gcd(ll x,ll y)
{
    return y?gcd(y,x%y):x;
}

ll exgcd(ll a,ll b,ll &x,ll&y)
{
    if(b==0){
        x=1,y=0;
        return a;
    }
    ll q=exgcd(b,a%b,y,x);
    y-=a/b*x;
    return q;
}

int main()
{
    scanf("%lld%lld",&n,&m);
    ll z=gcd(n,m);
    n/=z,m/=z;
    ll x,y;
    ll asd=exgcd(n,m,x,y);
    printf("%lld",(x+m)%m);
}

 

codevs1200noip2012—同余方程

...a的关于模p的逆 元为a^-1,则a^-1满足aa^-1≡1(modp),用扩展欧几里德即可。   关于扩展欧几里德,有 查看详情

noip2012day2

tags:扩展欧几里得二分答案查分倍增二分答案贪心NOIPcategories:信息学竞赛总结同余方程借教室疫情控制同余方程Solution  首先同余式可以转化为等式.\[ax\equiv1\modb\Leftrightarrowax+by=1\]  根据扩展欧几里得定理,对于式\[ax+by=k(a,b),k\... 查看详情

noip2012同余方程-拓展欧几里得

题目描述求关于x的同余方程ax≡1(modb)的最小正整数解。输入输出格式输入格式:输入只有一行,包含两个正整数a,b,用一个空格隔开。输出格式:输出只有一行,包含一个正整数x0,即最小正整数解。输入数据保证一定有解。&nb... 查看详情

同余方程(noip2012)

原题传送门水~纯拓展欧几里得算法。。#include<iostream>#include<cstdio>#definelllonglongusingnamespacestd;llans;inta,b;voidexgcd(inta,intb,int&x,int&y){if(b==0){x=1;y=0;return;}exgcd(b,a%b,x,y);intt= 查看详情

noip提高组2012同余方程

【算法】扩展欧几里德算法【题解】学完扩欧就可以随便水了。。。转化为不定方程ax-by=1。因为1且题目保证有解,所以方程有唯一解。紫书曰:同余方程的一个解其实指的是一个同余等价类。所以满足x≡x‘(modb)的其他x‘也是... 查看详情

codevs1200noip2012同余方程拓展欧几里德求乘法逆元模板题

模板,,,#include<cstdio>usingnamespacestd;voidexgcd(longlonga,longlongb,longlong&x,longlong&y){ if(b==0){x=1;y=0;} else{exgcd(b,a%b,x,y);intt=y;y=x-a/b*y;x=t;}}intmain(){ longlonga,b,x,y; s 查看详情

『线性同余方程和中国剩余定理』(代码片段)

...,则可以将方程改写为(ax+my=b),该不定方程可以使用扩展欧几里得算法快速地求解(详见『扩展欧几里得算法ExtendedEuclid』)。对于(gcd(a,m)ot|b)的情况,也可以直接判定为原方程无解。对于使用扩展欧几里得算法求解出来的一个解(x_... 查看详情

同余方程(扩展欧几里得)

#include<cstdio>usingnamespacestd;intx,y;intgcd(inta,intb,int&x,int&y){if(!b){x=1,y=0;returna;}intret=gcd(b,a%b,x,y);intt=x;x=y;y=t-a/b*y;returnret;}inta,b;intmain(){scanf("%d%d",&a, 查看详情

简单数论总结2——同余方程与扩展欧几里得算法(代码片段)

...是快要开学赶紧来肝上两篇今日内容——同余方程和扩展欧几里得算法同余同余的定义:若存在两个整数a,b,使得(a-b)MODP为0,则称作a与b在MODP的情况下同余换种通俗的说法,就是,aMODP与bMODP相等 记作  (aequivb(modP))... 查看详情

[noip2012]同余方程

Description求关于x的同余方程ax≡1(modb)的最小正整数解。Input输入只有一行,包含两个正整数a,b,用一个空格隔开。Output输出只有一行,包含一个正整数x0,即最小正整数解。输入数据保证一定有解。SampleInput310SampleOutput7Hint【数... 查看详情

洛谷p1082/noip2012同余方程

洛谷P1082/NOIP2012同余方程题目描述求关于x的同余方程ax≡1(modb)的最小正整数解。输入输出格式输入格式:输入只有一行,包含两个正整数a,b,用一个空格隔开。输出格式:输出只有一行,包含一个正整数x0,即最小正整数解。... 查看详情

noip2012同余方程题解

描写叙述求关于x的同余方程ax≡1(modb)的最小正整数解。格式输入格式输入仅仅有一行,包括两个正整数a,b,用一个空格隔开。输出格式输出仅仅有一行,包括一个正整数x0。即最小正整数解。输入数据保证一定有... 查看详情

同余方程2012年noip全国联赛提高组

...sp;空间限制:128000KB 题解题目描述 Description求关于x同余方程ax≡1(modb)的最小正整数解。 输入描述 InputDescription输入只有一行,包含两个正整数a,b,用一个空格隔开。 输出描述 OutputDescription输出只有一行包含... 查看详情

cogs——t1265.[noip2012]同余方程

...限制:1s  内存限制:128MB【题目描述】求关于x的同余方程ax≡1(modb)的最小正整数解。【输入格式】输入只有一行 查看详情

洛谷p1082同余方程

水题,扩展欧几里得求解即可错误原因:扩展欧几里得写炸#include<cstdio>#include<cmath>usingnamespacestd;typedeflonglongLL;LLx,y;LLa,b;LLexgcd(LLa,LLb){if(b==0){x=1;y=0;returna;}else{LLt1=exgcd(b,a%b),t=x;x=y;y=t-a/b*y 查看详情

[noip2012]提高组洛谷p1082同余方程

题目描述求关于x的同余方程ax≡1(modb)的最小正整数解。输入输出格式输入格式:输入只有一行,包含两个正整数a,b,用一个空格隔开。输出格式:输出只有一行,包含一个正整数x0,即最小正整数解。输入数据保证一定有解... 查看详情

同余方程

...马小定理做(赤裸裸的逆元啊)还记得exgcd是啥吗?扩展欧几里得算法,用来求解形似ax+by=gcd(a,b)一类方程的解。那和这个题有什么关系啊?这个题要求关于x的同余方程ax≡1(modb)的最小正整数解,我们把这个式子展开看一下。... 查看详情

luogup1516青蛙的约会(线性同余方程扩展欧几里德)(代码片段)

题意题解做了这道题,发现扩欧快忘了。根据题意可以很快地列出线性同余方程。设跳了k次x+mkΞy+nk(modl)(m-n)kΞ-(x-y)(modl)然后化一下(m-n)k+(x-y)Ξ0(modl)也就是前面一坨是l的倍数不妨设(m-n)k+(x-y)=-tl(m-n)k+tl=-(x-y)我们要求的就是保证t<... 查看详情