如何求解这个方程:\(ax + by = gcd (a, b)\)?
\(∵gcd(a, b) = gcd (b, a \% b)\)
\(∴\)易证 $ gcd(a, b)$ 总是可以化为 \(gcd (a',0)\)的形式
对于原方程\(a'*x + 0*y = gcd (a',0)\) (根据定义\(gcd(a',0) = a'\))
存在解为\({x=1,y=0}\)
设$gcd(a_1,b_1) \(为当前的\)gcd\(,\)gcd(a_2,b_2)\(为向下迭代后的\)gcd$
\({x1,y1}\)是当前解,\({x2,y2}\)是下一次\(gcd\)的解
$$a_1x_1 + b_1y_1 = gcd(a_1,b_1)$$
$$=gcd (a_2,b_2)$$
$$= gcd(b_1,a_1%b_1)$$
$$ = b_1*x2 + a_1 % b_1 *y2$$
由于\(a\%x = a-x*(a/x)\)
原式可以化简为:
$$a_1x_1 +b_1y_1 = b_1x_2+(a_1-(a_1/b_1)b_1)*y_2$$
$$a_1x_1 +b_1y_1 = a_1y_2+b_1x_2-(a_1/b_1)b_1y_2$$
$$a_1x_1 +b_1y_1 = a_1y_2+b_1(x_2-(a_1/b_1)*y_2)$$
我们已知下一次迭代得到的解\(x_2,y_2\)和\(a_1,b_1\)(边界为最终解\({x=1,y=0 }\))
那么就可以据此,系数对应,求出当前解:
$$x_1=y_2,y_1=x_2-(a_1/b_1)*y_2$$
经过层层迭代,就可以得到最终解。
代码:
int exgcd (int a1, int b1, int &x2, int &y2) {
//传址引用修改x2, y2
if (b1 == 0) {
x2 = 1, y2 = 0;
return a1;//边界情况
}
int div = exgcd (b1, a1 % b1, x2, y2);//向下递归
int x1 = y2, y1 = x2 - y2 * (a1 / b1);
return div;//返回约数 (可能没啥用QwQ关键求的是方程解)
}
用处:作为\(gcd\)的扩展版,它着力求的并不是\(gcd\),而是利用其性质求解形如\(ax + by = gcd (a, b)\)的方程,通常可以把逆元化为这种方程形式用\(exgcd\)快速求解。
(可能还有更多用处)
∵\(A*X\) \(mod\) \(B=1\)
∴\(A*X-B*Y=1\)
若\(B\)是质数,则二者\(gcd\)显然为\(1\)
(\(B\)不是质数逆元就不存在啦\(QwQ\))
代入\(exgcd\),求出来\(X\)的值就是\(A\)关于\(mod\) \(B\)的逆元
exgcd证明和最基础应用的更多相关文章
-
IPFS:Filecoin和复制证明
这篇文章主要来讲一下Filecoin协议里面的复制证明(Proof of Replication),由于协议涉及到很多概念,可能看起来有点晕乎乎的,小编尽量把复杂问题简单化 ,力求给大家做大普及IPF ...
-
检验 java 基础数据类型参数传递方式
测试证明,java基础数据类型参数传递值虽是引用传递但是值不会改变.对象是引用传递,值会改变. 为什么?找到一段话来解释这个问题. "对于字符串对象来说,虽然在参数传递的时候也是引用传递,但 ...
-
PHP反射API
近期忙着写项目,没有学习什么特别新的东西,所以好长时间没有更新博客.我们的项目用的是lumen,是基于laravel的一个轻量级框架,我看到里面用到了一些反射API机制来帮助动态加载需要的类.判断方法 ...
-
NOIP2012国王游戏
题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在 ...
-
Java学习之路:不走弯路,就是捷径
1.如何学习程序设计? JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用.有编程高手认为,JAVA也好C也好没什么分别,拿来就用.为 ...
-
OpenCV坐标体系的初步认识
实验基础 本次实验通过一个简短的例子,主要来说明下面4个问题: 1. 坐标体系中的零点坐标为图片的左上角,X轴为图像矩形的上面那条水平线:Y轴为图像矩形左边的那条垂直线.该坐标体系在诸如结构体Mat, ...
-
Codeforces Round #280 (Div. 2) E. Vanya and Field 数学
E. Vanya and Field Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/492/pr ...
-
Java自学成长路线(转载)
JAVA自学之路 一:学会选择 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等. JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅 ...
-
Java学习路径:不走弯路,这是一条捷径
1.如何学习编程? JAVA是一种平台.也是一种程序设计语言,怎样学好程序设计不只适用于JAVA,对C++等其它程序设计语言也一样管用.有编程高手觉得,JAVA也好C也好没什么分别,拿来就用.为什么他 ...
随机推荐
-
作为Coder的利器记载
工作近三年,使用PC快六年,拥抱Mac整一年,投具器石榴裙三年.14年第一次被同事推荐Everything,开启了JeffJade对工具的折腾之旅,并乐此不疲.时去两年,这必然是消耗了一些时间,但对效 ...
-
java web使用gradle配置详情
博客说明:本片博客为FSSARB项目片面部分,目前项目还在更新中,请持续关注... 序言 项目构建工具从ant到maven,再到gradle,这是在严峻的技术考验下不停过度的结果.依照百度百科的阐述, ...
-
如何在断开ssh连接后仍然保持服务器正常运行程序
问题描述:当SSH远程连接到服务器上,然后运行一个Python程序(bpr.py),然后把终端开闭(切断SSH连接)之后,发现该程序执行中断. 解决方法:使用nohup命令让程序在关闭窗口(切换SSH ...
-
SQL存储过程相关信息查看转
原文地址:http://www.cnblogs.com/minideas/archive/2009/10/29/1591891.html --1.查看所有存储过程与函数 exec sp_ ...
-
ubuntu 安装flash插件
参考文献: http://wiki.debian.org.hk/w/Install_Flash_Player_with_APTapt-get install adobe-flashplugin
-
myeclipse 添加服务器运行时环境
像servlet-api.jar.servlet-api.jar服务器能提供的包 解决方法如下: 1,File->New->Other->Server->Server(注意在n ...
-
sizeof(long)
16位系统:long是4字节,int是2字节32位系统:long是4字节,int是4字节64位系统:long是8字节,int是4字节
-
webservice wsdl语法基础
XML-WSDL基础知识 WSDL 1.1. WSDL 简介 1.1.1. 概述 WSDL 指网络服务描述语言 (Web Services Description Language) WSDL ...
-
项目实战——企业级Zabbix监控实战(一)
项目实战--企业级Zabbix监控实战 实验一:Zabbix监控的搭建 1.实验准备 centos系统服务器3台. 一台作为监控服务器, 两台台作为被监控节点, 配置好yum源. 防火墙关闭. 各节点 ...
-
掌握numpy(二)
目录 掌握numpy(一) 掌握numpy(二) 掌握numpy(三) 掌握numpy(四) 数组的reshape 顾名思义,就是对数组的形状进行改变,比如行变成列,一行变多行等. in place ...