算法之旅 Euclid算法的扩展
来源:互联网 发布:网络社团有哪些 编辑:程序博客网 时间:2024/06/07 05:13
Euclid算法的扩展
- 真言
有时候真的感觉时间不够用,村里人事挺多的,时间就这么浪费了。
- 算法
Euclid算法是求最大公约数的,介绍请点击在这。Euclid算法的扩展如下引理 如果d整除a和b,同时存在整数x和y,使得d = ax+by成立,那么一定有d = gcd(a,b)。证明如下
- d能整除 a和b,d <= gcd(a,b).
- d能整除 a和b,d就能整除 ax和by,gcd(a,b) <= d.
so gcd(a,b) == d递归思想从上往下a,b -----> b, a mod b从下往上b*x' + (a mod b)*y' = d -----> a*x + b*y = dbut how can we get x and y? Solution followsif(b == 0)x = 1, y = 0, d = a
- 实验
- 代码
test.cpp#include<iostream>using namespace std;class xyd{public:int x ;int y ;int d ;};// function Euclid xyd * Euclid_extra(int a,int b);// function main int main() { int a,b,i = 0; xyd * R = new xyd;int max;while( i<55 ) { a = rand()%10; b = rand()%10; if( a<b ){max = b;b = a;a = max;}R = Euclid_extra(a,b) ;if( R ){cout<<"a="<<a<<",b="<<b<<",R->x="<<R->x<<",R->y="<<R->y<<",d="<<R->d<<endl;cout<<"a*x + b*y = "<<R->d<<endl;}i++; } system("pause"); return 0; } // function Euclid xyd * Euclid_extra(int a,int b){if( a <= 0 || b < 0 ){cout<<"exception of Euclid_extra input"<<endl ;return NULL ;}else{int max;if( a<b ){max = b;b = a;a = max;}xyd * R = new xyd; if(b == 0){R -> x = 1;R -> y = 0;R -> d = a;return R;}else{R = Euclid_extra(b,a%b);}xyd * R2 = new xyd;R2 -> x = R -> y;R2 -> y = (R -> x) - ( (a/b) * (R->y) );R2 -> d = R->d;return R2;}}
0 0
- 算法之旅 Euclid算法的扩展
- Euclid 算法
- Euclid 算法
- Euclid算法
- RSA公钥加密+(Euclid)欧几里德扩展算法
- 求最大公约数的算法-Euclid & stein
- GCD的C实现--Euclid算法
- 最大公约数(GCD)的Euclid算法
- 最大公约数(Euclid算法)
- Euclid算法与RSA
- Euclid(欧几里得)算法
- euclid最大公约数算法
- 《应用密码学》 欧几里得算法-Euclid
- 数学基础一(Euclid算法)
- 最大公约数(gcd):Euclid算法证明
- 最大公约数(gcd):Euclid算法证明
- 求最大公约数的欧几里德算法(Euclid's Algorithm)
- 求最大公约数的两种算法(Euclid&&Stein)
- CSharp难点逐个击破文档分享
- Csharp编程指南+参考手册文档分享
- unsigned int
- 快速排序的实现
- 印象中的上学
- 算法之旅 Euclid算法的扩展
- 一个人,一座城,一声心疼
- Old and New Notification的创建 以及自定义的
- linux grep
- POJ 3225-线段树求区间或集合的交并补、异或
- K&R复习,数据结构(C语言版)复习,算法导论复习
- 23种设计模式简单概述之单例模式
- Struts2.3.15.1升级总结
- 内存控制单元MMU(一)