拓展欧几里得理论基础(含一定证明)

首先有gcd(a,b)==gcd(b,a%b)这个复杂度最差也是log2的

因为大数对小数取余的时候 这个小数如果是比大数的一半大 那么取余完会比大数的一半大,如果小数比大数的一半小 那么取余完还是会比大数的一半大,所以最差也是log2的。

 

然后是ax+by=c有解的充要条件是c整除gcd(a,b)

这个证明如下:

 首先必要条件 因为a,b是整除gcd(a,b)的 所以ax+by(c)也肯定整除gcd(a,b)

充分条件是证明C若整除gcd(a,b),那么必然有整数x,y满足ax+by=C;
这个充分条件的证明可以化简为a/gcd(a,b)*x+b/gcd(a,b)*y=C/gcd(a,b),令p=a/gcd(a,b),q=b/gcd(a,b),m=C/gcd(a,b)  
则只要px+qy=1有整数解就可以了(这个有整数解,x,y再乘m就是原式的整数解)
p,q是互质的。
首先可知道对于p来说,p,2*p,.....q*p这一共有q个数(可以把它看成一个循环节)
这q个数对q取余的结果一定是互不相同的
用反证法 若有两个数对q取余的结果是相同的 这两个数的差一定既是p的倍数又是q的倍数
同时p,q的最小公倍数是p*q
而这两个数的差是小于p*q的所以推出矛盾
然后这q个数对q取余的结果一定互不相同
那么就是余数就是0-q-1,所以1是一定可以满足的。

 设 ax1+by1=gcd(a,b);

 bx2+(a % b)y2=gcd(b,a % b);

 根据朴素的欧几里德原理有 gcd(a,b)=gcd(b,a % b);

 则:ax1+by1=bx2+(a % b)y2;

 即:ax1+by1=bx2+(a-(a/b)*b)y2=ay2+bx2-(a/b)*by2;

 根据恒等定理得:x1=y2; y1=x2-(a/b)*y2;

在找到ax+by=gcd(a, b)的一组解x0,y0后,应该是得到ax+by=c的一组解x1 = x0*(c/gcd(a,b)),y1 = y0*(c/gcd(a,b)),

ax+by = c的其他整数解满足:

x = x1 + b/gcd(a, b) * t
y = y1 - a/gcd(a, b) * t(其中t为任意整数)
x 、y就是 ax+by=c的所有整数解。

代码部分参考

代码:

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

求解ax+by=c

bool linear_equation(int a,int b,int c,int &x,int &y)
{int d=exgcd(a,b,x,y);if(c%d)return false;int k=c/d;x*=k; y*=k;    //求得的只是其中一组解return true;
}

 

转载于:https://www.cnblogs.com/mfys/p/9069658.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Sqli-labs less 64

Less-64 此处的sql语句为 $sql"SELECT * FROM security.users WHERE id(($id)) LIMIT 0,1"; 示例payload: http://127.0.0.1/sqli-labs/Less-64/?id1))and%20If(ascii(substr((select%20group_concat(table_name)%20from%20information_schema.tables%20…

linux 双显卡 黑屏 amd,Win10系统AMD双显卡笔记本开机出现黑屏怎么办?解决方法...

win10是一个全新的操作系统,所以我们在使用时很有可能会碰到一些没见过的新问题。比如,有用户在升级到Windows10后,发现AMD双显卡笔记本出现了开机黑屏的情况。具体表现为:Windows Logo加载之后,用户登陆之前会出现30s…

双目立体视觉建立深度图_关于双目立体视觉的三大基本算法及发展现状的总结...

作者:何文博双目立体视觉一直是机器视觉研究领域的发展热点和难点,“热”是因为双目立体视觉有着及其广阔的应用前景,且随着光学、计算机科学等学科的不断发展,双目立体技术将不断进步直到应用到人类生活的方方面面。“难”则是因…

layer弹出层

个人觉得风格不错的,所以收藏下来: layer.open({title: 提示,offset: 100px,skin: layui-layer-lan,content:这是一个open弹出框,time: 3000}); layer.open({type: 1 //Page层类型,area: [500px, 300px] //弹出层大小,title: 你好,layer。,sh…

[BZOJ 1834] [ZJOI2010]network 网络扩容

1834: [ZJOI2010]network 网络扩容 Time Limit: 3 SecMemory Limit: 64 MBDescription 给定一张有向图,每条边都有一个容量C和一个扩容费用W。这里扩容费用是指将容量扩大1所需的费用。求: 1、 在不扩容的情况下,1到N的最大流; 2、…

fw150us的linux驱动下载,迅捷FW150US1.0/2.0无线网卡驱动

迅捷FW150US1.0/2.0无线网卡驱动官方版是迅捷推出的一款超小型150M无线USB网卡,安装迅捷FW150US1.0/2.0无线网卡驱动官方版,即可正常连接电脑使用。迅捷FW150US1.0/2.0无线网卡驱动支持自动检测功能,能够自动调整速率,无线传输速率…

20160811

一:边框样式 1.边框线 border-style : none | hidden | dotted | dashed | solid | double | groove | ridge | inset | outset 例:div { width:300px; height:100px; border-style:solid; } border-top-style 设置上边框线 border-bott…

vip地址能ping不通_电脑高手必备ping和netstat命令

1、Ping的基础知识ping命令相信大家已经再熟悉不过了,但是能把ping的功能发挥到最大的人却并不是很多,当然我也并不是说我可以让ping发挥最大的功能,我也只不过经常用ping这个工具,也总结了一些小经验,现在和大家分享一…

git无法pull仓库refusing to merge unrelated histories

我在Github新建一个仓库,写了License,然后把本地一个写了很久仓库上传。 先pull,因为两个仓库不同,发现refusing to merge unrelated histories,无法pull 因为他们是两个不同的项目,要把两个不同的项目合并…

ld: -pie can only be used when targeting iOS 4.2 or later clang: error: linker command failed with e

把Deployment Target 改为4.3或以后 图片:屏幕快照 2014-10-13 16.56.51.png 版权声明:本文为博主原创文章,未经博主允许不得转载。 转载于:https://www.cnblogs.com/thelatewind/p/4700937.html

linux   图片

转载于:https://blog.51cto.com/wzsts/1837102

c语言中通过分隔符取字符串,C语言切割多层字符串(strtok_r strtok使用方法)

1. strtok介绍众所周知,strtok可以根据用户所提供的分割符(同时分隔符也可以为复数比如“,。”)将一段字符串分割直到遇到"\0".比如,分隔符“,” 字符串“Fred,John,Ann”通过strtok 就可以把3个…

array python 交集_Python基础(二)——列表和元组

Python中最基本的数据结构是序列,序列中的每一个元素都有编号,即索引(从左到右第一个索引为0,从右到左第一个索引为-1)。python提供的序列类型在所有程序设计语言中是最丰富、最灵活,也是功能最强大的。pyt…

定义jQuery插件

JQuery&JS扩展方法的实现: JQuery: http://www.cnblogs.com/xcj26/p/3345556.html JS: http://www.cnblogs.com/kissdodog/p/3386480.html转载于:https://www.cnblogs.com/yaoqtan/p/4634943.html

c语言注释部分两侧的分界符号分别是,c语言中界定注释的符号分别是什么?

在c中有两种类型的注释:单行注释和成对注释。单行注释以双斜线(//)开头。同一行中斜线右侧的所有内容都是注释,会被编译器略过。另一个分隔符是注释符号对(/**/),它继承自c语言。这种注释以/*开始,以*/结尾。编译器把/*和*/之间的…

浅谈PHP+Access数据库的连接 注意要点

今天公司需要用php连接access 数据库,结果整了半天Access数据库 就是连接不上,查找 很多资料,以下是我的经验, -.- 希望能给需要连接access 数据的人带来帮助。。-.- 需要注意: 安装access 数据库的时候 需要安装与本…

lua 字符串分割_Lua函数式编程(中)

书接前文,我们继续慢慢的了解 所谓的函数式编程思想。考查下面的例子判断给定的数是否是偶数 在Lua里面这似乎是个幼儿园问题local isEven function(v) return v % 2 0 end但我们如何用函数式的思维去解决问题?是的,假设我们有了以下函数R.…

mybatis 乐观锁和逻辑删除

本篇介绍easymybatis如配置乐观锁和逻辑删除。 乐观锁 easymybatis提供的乐观锁使用方式跟JPA一样,使用Version注解来实现。即:数据库增加一个int或long类型字段version,然后实体类version字段上加上Version注解即可。实现原理是根据mysql的行…

WCF技术剖析之二十七: 如何将一个服务发布成WSDL[基于HTTP-GET的实现](提供模拟程序)...

WCF技术剖析之二十七: 如何将一个服务发布成WSDL[基于HTTP-GET的实现](提供模拟程序) 原文:WCF技术剖析之二十七: 如何将一个服务发布成WSDL[基于HTTP-GET的实现](提供模拟程序)基于HTTP-GET的元数据发布方式与基于WS-MEX原理类似…

网络配置 rpm yum

vm0 vm1 vm2安装vmware后:安装vmware tools工具1 物理机和虚拟机复制 粘贴 unity模式 共享文件夹等功能2设置共享文件夹网络相关命令# lspci |grep eth 查看驱动卡信息#mii-tool eth1eth1:negoriated 100baseTX-FD,link ok ,如果fail表示网线没连接好ifconfig 查看…