[P1082][NOIP2012] 同余方程 (扩展欧几里得/乘法逆元)
最近想学数论
刚好今天(初赛上午)智推了一个数论题
我屁颠屁颠地去学了乘法逆元
(zcy吊打集训队!)(逃
然后才开始做这题。
乘法逆元
乘法逆元的思路大致就是a*x恒等于1(mod b)满足a,b互质,则x为a的逆元
这里给一个P2613的函数
void exgcd(int a, int b, int &d, int &x,int &y)
{
if (b == ) {
d = a;
x = ;
y = ;
return;
}
exgcd(b, a%b, d, x, y);
int t = y;
y = x - (a / b)*y;
x = t;
}
还有一个线性算法,就是适合P3811的
a[i] = (p-p/i)*a[p%i]%p;//zcyddjxd
大致就是这两种了
本蒟蒻在数学一本通上看的线性貌似是a[i] = -(p/i)*a[p%i]%p; 看起来用在这里不行
思路
上面介绍了一下乘法逆元的算法,其中第一种就是扩展欧几里得的出来的
我这里引用@huangdu233 大佬的题解的分析(我自己推导不来,只会插模板)
求解不定方程a*x+b*y==gcd(a,b);
先给个解法推导吧:
∵a=[a/b]*b+a%b;
又∵欧几里得知:gcd(a,b)==gcd(b,a%b);
∴([a/b]*b+a%b)*x+b*y=gcd(a,b);
∴[a/b]*b*x+(a%b)*x+b*y=gcd(a,b);
∴b*([a/b]*x+y)+(a%b)*x=gcd(b,a%b);
看到这里,我们不难发现:
令:a'=b,x'=[a/b]*x+y,b'=a%b,y'=x;
整理后原式又变成了:a'*x'+b'*y'==gcd(a',b');
当当当当!!!!!可以递归了
废话了那么多,我就直接给代码吧
#include<bits/stdc++.h>
#define ll long long
#define mod 19260817
#define MAXN 10010
using namespace std;
ll a,b,x,y;
void exgcd(ll a, ll b, ll &x, ll &y)
{
if (b == ) {
x = ;
y = ;
return;
}
exgcd(b, a%b, y, x);
y -= (a / b)*x;
}
int main()
{
cin >> a >> b;
exgcd(a, b, x, y);
cout << (x + b) % b;
}
(刚用上VisualStudio 感觉还行)
注意
刚发现hl大佬写了这题的题解!
https://www.luogu.org/blog/hl666/solution-p1082
Orz 太强了
[P1082][NOIP2012] 同余方程 (扩展欧几里得/乘法逆元)的更多相关文章
- luogu1082 [NOIp2012]同余方程 (扩展欧几里得)
由于保证有解,所以1%gcd(x,y)=0,所以gcd(x,y)=1,直接做就行了 #include<bits/stdc++.h> #define pa pair<int,int&g ...
- hdu_1576A/B(扩展欧几里得求逆元)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1576 A/B Time Limit: 1000/1000 MS (Java/Others) Me ...
- 扩展欧几里得模板&逆元求法
拓展欧几里得: 当 gcd ( a , b )= d 时,求绝对值和最小的 x , y 使得 x * a + y * b = d : d = gcd ( a , b ) = gcd ( b , a m ...
- luogu P1082 同余方程 |扩展欧几里得
题目描述 求关于 x的同余方程 ax≡1(modb) 的最小正整数解. 输入格式 一行,包含两个正整数 a,ba,b,用一个空格隔开. 输出格式 一个正整数 x,即最小正整数解.输入数据保证一定有解. ...
- NOIP2012 同余方程-拓展欧几里得
题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正 ...
- 洛谷——P2054 [AHOI2005]洗牌(扩展欧几里得,逆元)
P2054 [AHOI2005]洗牌 扩展欧拉定理求逆元 $1 2 3 4 5 6$$4 1 5 2 6 3$$2 4 6 1 3 5$$1 2 3 4 5 6$ 手推一下样例,你就会发现是有规律的: ...
- hdu 1576 A/B 【扩展欧几里得】【逆元】
<题目链接> <转载于 >>> > A/B Problem Description 要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)( ...
- 【数学】【NOIp2012】同余方程 题解 以及 关于扩展欧几里得与同余方程
什么是GCD? GCD是最大公约数的简称(当然理解为我们伟大的党也未尝不可).在开头,我们先下几个定义: ①a|b表示a能整除b(a是b的约数) ②a mod b表示a-[a/b]b([a/b]在Pa ...
- 【扩展欧几里得】NOIP2012同余方程
题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正 ...
随机推荐
- JavaScript编程语言
JavaScript编程语言 JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应 ...
- CORS跨域
一:简介 为什么会出现跨域问题? 受同源策略影响,不同域名之间不可以进行访问.同源策略(Same-Origin Policy).所谓的 同源 是指域名.协议.端口号 相同.不同的客户端脚本(JavaS ...
- WCF与WebService的区别(转)
1.WebService:严格来说是行业标准,不是技术,使用XML扩展标记语言来表示数据(这个是夸语言和平台的关键).微软的Web服务实现称为ASP.NET Web Service.它使用Soap简单 ...
- centos6.x完全禁用IPv6的方法
https://blog.csdn.net/prettyshuang/article/details/51731890
- jQuery中的extend()方法
通常我们使用jquery的extend时,大都是为了实现默认字段的覆盖,即若传入某个字段的值,则使用传入值,否则使用默认值.如下面的代码: function getOpt(option){ var _ ...
- 记录一次因代理Controller产生的404问题
spring 3.2.4 为了给每一个controller配置一个拦截器链 import com.google.common.collect.Lists; import org.aopalliance ...
- [转]git 删除远程仓库文件
来源:https://www.jianshu.com/p/de75a9e3d1e1 git删除远程文件夹或文件的方法 项目开发初期由于.gitignore 文件配置不正确很有可能导致某些不需要的目录上 ...
- win7自带截屏便签 打开命令
win7自带截屏 1.win+r 2.SnippingTool.exe 打开 便签 1.win+r 2.StikyNot.exe 打开 查本机ip 1.win+r 2.cmd 3.ipco ...
- [转]DBCP连接池的最简单应用(用于ORACLE数据库)
http://blog.csdn.net/iihero/article/details/8254107 http://www.programgo.com/article/81693457907/ 鉴于 ...
- Docker技术底层架构剖析
[Docker 底层技术] docker底层的 2 个核心技术分别是 Namespaces 和 Control groups 在操作系统中,网络配置,进程,用户,IPC(进程之间的调用)等信息之间的 ...