欧几里得算法与扩展算法
2017-10-23 00:03
281 查看
概述
学习RSA实现的基本原理时,发现里面使用了欧几里得算法,所以在此整理一下欧几里得算法。基本概念
约数,又称因数。整数a除以整数b(b≠0)余数为0(a%b=0),我们就说a能被b整除,或b能整除a。a称为b的倍数,b称为a的约数。公约数,又叫“公因数”。如果一个整数同时是几个整数的约数,称这个整数为这几个整数的“公约数”;显然对任意的若干个正整数,1总是它们的公约数。公约数中最大的那个称为最大公约数用符号gcd表示。
欧几里得算法又叫辗转相除法,是求两个整数的最大公约数(使用符号gcd(a,b)来表示)的一种方法。
欧几里得算法
1、定理
两个整数的最大公约数等于其中较小的那个数和两数相除取的的余数的最大公约数,使用符号表示为gcd(a,b)=gcd(b,a mod b),设a>b。2、证明
公式:gcd(a,b)=gcd(b,a mod b), (a>b);1. 假设c为a和b的最大公约数,则存在a=k1c,b=k2c;
2. 令r=a mod b, 展开方程为r=a-kb,将上面的a=k1c,b=k2c代入,则r=k1c-kk2c=(k1-kk2)c,显然余数r依然为最大公约数c的倍数。
3、c语言算法表示
int gcd(int a, int b) { if (a < b) { int temp = a; a = b; b = temp; } return b == 0 ? a : gcd(b, a%b); }
欧几里得扩展算法
1、定理
对于不完全为 0 的非负整数 a,b,必然存在整数对 x,y ,使得 gcd(a,b)=ax+by。2、c语言算法表示####
int gcdEx(int a, int b, int *x, int *y){ if (a == 0){ *x = 0; *y = 1; return b; } int x1, y1; int gcd = gcdEx(b%a, a, &x1, &y1); *x = y1 - (b/a) * x1; *y = x1; return gcd; }
相关文章推荐
- 欧几里得算法与扩展算法相关内容
- 欧几里得算法和扩展欧几里得算法
- 经典算法(4)- 用欧几里得算法实现扩展的最大公约数(Extended GCD)
- 欧几里得算法以及扩展算法
- 欧几里得算法与欧几里的扩展算法
- 扩展欧几里得算法------扩展欧几里德算法
- 算法学习(1)----扩展欧几里得算法
- 【算法学习】扩展欧几里得算法
- 欧几里德算法及其扩展算法
- 乐观复制算法-9.扩展乐观复制系统
- 扩展欧几里得算法
- Modified LCS (扩展欧几里德)细写了对这个算法思路的理解
- 扩展欧几里得算法学习笔记
- 扩展欧几里得算法
- 欧几里得算法(辗转相除法 )以及扩展欧几里得算法
- 最大公约数 欧几里得算法 连续监测算法
- 扩展欧几里得算法
- 【算法】(扩展)KMP+manacher
- 欧几里得算法与其扩展 Romantic
- 字符串匹配之朴素算法和通配符扩展