扩展欧几里德算法
来源:互联网 发布:linux获取线程优先级 编辑:程序博客网 时间:2024/06/10 07:42
#include <iostream>
using namespace std;
//扩展欧几里德算法
int ExGCD(int a, int b, int& x, int& y)
{
if(b == 0)
{
x = 1, y = 0;
return a;
}
int d = ExGCD(b, a%b, x, y);
int temp = x;
x = y;
y = temp - a/b*y;
return d;
}
int main()
{
int x, y, d;
d = ExGCD(99, 78, x, y);
cout << d << " " << x << " " << y << endl;
return 0;
}
//定理一: 如果a,b是不都为0的任意整数,则d=gcd(a,b)是a,b的线性组合{ax+by: x,y∈Z}的最小元素.
// 已知d=gcd(a,b)=gcd(b,a mod b)
//
//由gcd(b,a mod b)得知,d = bx + a mod b = bx + (a-floor(a/b)*b)*y = a*y + b(x-floor(a/b)*y)
//当推到gcd(a,b)时,d′ = d = a*y + b(x-floor(a/b)*y)
//其他比较重要定理:
//定理二:d|a, d|b => d|(ax+by) 注:d|a表示a mod b == 0,即a能被b整除
//定理一推论: 对任意整数a,b如果d|a,d|b,则d|gcd(a,b)
//附:
int GCD(int a, int b)
{
if(b == 0)
return a;
return GCD(b, a % b);
}
//迭代形式:
int GCD(int a, int b)
{
while(b != 0)
{
int r = b;
b = a % b;
a = r;
}
return a;
}
using namespace std;
//扩展欧几里德算法
int ExGCD(int a, int b, int& x, int& y)
{
if(b == 0)
{
x = 1, y = 0;
return a;
}
int d = ExGCD(b, a%b, x, y);
int temp = x;
x = y;
y = temp - a/b*y;
return d;
}
int main()
{
int x, y, d;
d = ExGCD(99, 78, x, y);
cout << d << " " << x << " " << y << endl;
return 0;
}
//定理一: 如果a,b是不都为0的任意整数,则d=gcd(a,b)是a,b的线性组合{ax+by: x,y∈Z}的最小元素.
// 已知d=gcd(a,b)=gcd(b,a mod b)
//
//由gcd(b,a mod b)得知,d = bx + a mod b = bx + (a-floor(a/b)*b)*y = a*y + b(x-floor(a/b)*y)
//当推到gcd(a,b)时,d′ = d = a*y + b(x-floor(a/b)*y)
//其他比较重要定理:
//定理二:d|a, d|b => d|(ax+by) 注:d|a表示a mod b == 0,即a能被b整除
//定理一推论: 对任意整数a,b如果d|a,d|b,则d|gcd(a,b)
//附:
int GCD(int a, int b)
{
if(b == 0)
return a;
return GCD(b, a % b);
}
//迭代形式:
int GCD(int a, int b)
{
while(b != 0)
{
int r = b;
b = a % b;
a = r;
}
return a;
}
0 0
- 欧几里德算法 & 扩展欧几里德算法
- 欧几里德和扩展欧几里德算法
- 欧几里德与扩展欧几里德算法
- 欧几里德与扩展欧几里德算法
- 欧几里德与扩展欧几里德算法
- 欧几里德与扩展欧几里德算法
- 欧几里德与扩展欧几里德算法
- 欧几里德与扩展欧几里德算法
- 欧几里德与扩展欧几里德算法
- 欧几里德与扩展欧几里德算法
- 欧几里德与扩展欧几里德算法
- 欧几里德与扩展欧几里德算法
- 欧几里德与扩展欧几里德算法
- 欧几里德与扩展欧几里德算法
- 欧几里德与扩展欧几里德算法
- 欧几里德算法及扩展欧几里德
- 欧几里德与扩展欧几里德算法
- 欧几里德和扩展欧几里德算法
- Android高效加载大图、多图解决方案,有效避免程序OOM
- get product of array
- 《如何阅读一本书》感后读
- hdu 2289 Cup
- hdoj1878欧拉回路
- 扩展欧几里德算法
- HDU1272小希的迷宫(并查集+环)
- 遗传算法
- 使用Python的paramiko模块代码端为Linux添加系统用户并设置密码
- Ubuntu环境下Pixhawk原生固件PX4的编译
- Java面试——从JVM角度比较equals和==的区别
- WebGL学习笔记(三)坐标系的秘密
- c/c++第七天
- html实现数据的增删查改