<数论相关>欧几里得与拓展欧几里得证明及应用
欧几里得算法
欧几里得算法的复杂度为O(log(n)),是一个非常高效的求最大公约数算法。
在这里不证明欧几里得算法的复杂度,有兴趣的可以访问以下链接:http://blog.sina.com.cn/s/blog_62e4e31a0101feo7.html
定义如下:
欧几里德算法是用来求两个正整数最大公约数的算法。是由古希腊数学家欧几里德在其著作《The Elements》中最早描述了这种算法,所以被命名为欧几里德算法。
计算公式为:gcd(a,b) = gcd(b,a mod b)
证明:
边界情况:gcd(n,0)=n 因为当除数为0时 任何数都可以整除0;此时最大公约数为被除数n;
一般情况:设a除以b商为p余数为q 则有 a = b*p + q;
a可以看作是两部分相加 根据模数的性质 (x+y)%p = (x%p + y%p) %p 即 a可以整除b*p与q的最大公因数,当然也可以整除b与q的最大公因数
有b与q的最大公因数gcd(b,q),可知a一定可以整除gcd(b,q),所以a,b,q都可以整除gcd(b,q),因此gcd(b,q)可以整除gcd(a,b);
变化一下形式 q=a-b*p,同理可得gcd(a,b)整除gcd(b,q);
综上可以得到gcd(a,b)=gcd(b,a%b)
证毕。
拓展欧几里得算法
扩展欧几里德算法可以用来求解形如 ax+by=c的方程的一组整数解(其中a,b,c均为整数)
存在整数解的充分条件是gcd(a,b)|c,即c为a b最大公约数的一个倍数;
求解:
先将等式左右两边同时除以gcd(a,b),不影响后续计算
即ax+by=1且a与b互质。
由于:
所以x变成了y,y变成了x-[a/b]*y,利用这个关系可以带入递推公式求解。
特殊性:当b=0的时候,a=1,此时x=1,y=0
代码实现:
void Exgcd(ll a, ll b, ll &x, ll &y) {
if (!b) x = , y = ;
else Exgcd(b, a % b, y, x), y -= a / b * x;
}
参考:https://www.cnblogs.com/zjp-shadow/p/9267675.html#autoid-3-3-0
<数论相关>欧几里得与拓展欧几里得证明及应用的更多相关文章
- ACM数论-欧几里得与拓展欧几里得
ACM数论——欧几里得与拓展欧几里得 欧几里得算法: 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd ...
- gcd模板(欧几里得与扩展欧几里得、拓展欧几里得求逆元)
gcd(欧几里得算法辗转相除法): gcd ( a , b )= d : 即 d = gcd ( a , b ) = gcd ( b , a mod b ):以此式进行递归即可. 之前一直愚蠢地以为辗 ...
- NOIP2012拓展欧几里得
拉板题,,,不说话 我之前是不是说过数据结构很烦,,,我想收回,,,今天开始的数论还要恶心,一早上听得头都晕了 先来一发欧几里得拓展裸 #include <cstdio> void gcd ...
- BZOJ-2242 计算器 快速幂+拓展欧几里得+BSGS(数论三合一)
污污污污 2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2312 Solved: 917 [Submit][S ...
- [zoj 3774]Power of Fibonacci 数论(二次剩余 拓展欧几里得 等比数列求和)
Power of Fibonacci Time Limit: 5 Seconds Memory Limit: 65536 KB In mathematics, Fibonacci numbe ...
- 51 Nod 1256 乘法逆元(数论:拓展欧几里得)
1256 乘法逆元 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K ...
- SGU 141.Jumping Joe 数论,拓展欧几里得,二元不等式 难度:3
141. Jumping Joe time limit per test: 0.25 sec. memory limit per test: 4096 KB Joe is a frog who lik ...
- poj 1845 【数论:逆元,二分(乘法),拓展欧几里得,费马小定理】
POJ 1845 题意不说了,网上一大堆.此题做了一天,必须要整理一下了. 刚开始用费马小定理做,WA.(poj敢说我代码WA???)(以下代码其实都不严谨,按照数据要求A是可以等于0的,那么结果自然 ...
- poj 1061 青蛙的约会+拓展欧几里得+题解
青蛙的约会+拓展欧几里得+题解 纵有疾风起 题意 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出 ...
随机推荐
- Leetcode724.Find Pivot Index寻找数组的中心索引
给定一个整数类型的数组 nums,请编写一个能够返回数组"中心索引"的方法. 我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和. 如果数组不 ...
- Ubuntu18.04+windows10双系统时间同步教程
前言: 系统安装windows10和Ubuntu18.04双系统后会出现时间不同步的情况,往往windows系统的时间会有错误,一般会有8个小时的误差. 原因: 主要因为本地时间与硬件时间的时差: 本 ...
- a configuration error occured during startup.please verify the preference field with the prompt:
Window->Preferences->MyEclipse Enterprice Workbench->Servers->Tomcat->选择你的Tomcat(比如To ...
- python 里内嵌函数是可以修改外部环境里的变量的
python 里内嵌函数是可以修改外部环境里的变量的 关键是细节. 如果是简单变量类型, 那么不可以. 但是如果是容器类变量, 则没问题了. 代码如下: class G: pass def f(): ...
- 【转载】Combination Sum
Combination Sum Given a set of candidate numbers (C) and a target number (T), find all unique combin ...
- LeetCode112 Path Sum
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...
- 2018-8-10-WPF-修改按钮按下的颜色
title author date CreateTime categories WPF 修改按钮按下的颜色 lindexi 2018-08-10 19:16:53 +0800 2018-03-15 2 ...
- 数据库设计mysql字段不默认为NULL原因搜集
索引不会包含有NULL值的列 只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的.所以我们在数据库设计时不要让字段的默认值为NULL ...
- hdu 5744 Keep On Movin (2016多校第二场)
Keep On Movin Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...
- UTF-8与UTF-8 BOM
在我们通常使用的windows系统中,我发现了一个有趣的现象.我新建一个空的文本文档,点击文件-另存为-编码选择UTF-8,然后保存.此时这个文件明明是空的,却占了3字节大小.原因在于:此时保存的编码 ...