最大公约数的简单算法
来源:互联网 发布:订单管理数据流程图 编辑:程序博客网 时间:2024/06/03 21:48
求两个正整数x和y的最大公约数。(如果两个正整数都很大,有什么简单的算法吗?)
#include<iostream>#include<string.h>#include<math.h>using namespace std;int main(){ int max_gongyueshu, x, y; int gcd(int, int); cout << "输入x和Y:" << endl; cin >> x >> y; max_gongyueshu = gcd(x, y); cout << "max_gongyueshu is " << max_gongyueshu << endl; return 0;}int gcd(int x, int y){ if (x < y) //若x<y,先交换,避免一个正数和一个负数的最大公约数的出现 return gcd(y, x); if (y == 0) return x; //一直迭代下去,直到其中一个数为0 else return gcd(x - y, y);}
分析:最简单的求最大公约数算法是欧几里得的辗转相除法,但是对于大数取模运算,开销非常大。如果一个数能够同时整除y和x,则必能同时整除x-y和y;而能够同时整除x-y和y的数也必能同时整除x和y,即x和y的最大公约数与x-y和y的最大公约数是相同的。即f(x,y)=f(x-y,y),那么就可以换成简单的多的大整数的减法。一直迭代下去,直到其中一个数为0,如f(42,30)=f(12,30)=f(30,12)=f(18,12)=f(6,12)=f(12,6)=f(6,6)=f(6,0)=6.
0 0
- 最大公约数的简单算法
- 求最大公约数和最小公倍数的最简单 高效的算法
- 最大公约数的算法
- 最大公约数的算法
- 最大公约数的算法
- 求最大公约数的算法
- 计算最大公约数的算法
- 求最大公约数的算法
- 求最大公约数的算法
- 高效的最大公约数算法
- 求最大公约数的算法
- 求最大公约数的算法
- 最大公约数的算法
- 求最大公约数的算法
- 求最大公约数的算法
- 最大公约数的欧几里德算法
- 最大公约数的相关算法
- [算法]求最大公约数的算法
- vs2010 启动失败
- java注解
- Android ontouch 拖动与点击事件冲突解决方式
- 用Erlang开发的九大开源项目汇总及介绍
- netstat
- 最大公约数的简单算法
- Android平台的 Ptrace, 注入, Hook 全攻略
- C primer plus 第十章 练习6:
- Top K 算法详解(哈希表Hash的使用)
- android 蓝牙4.0多通道
- vimgrep的用法
- 如何把ppt转换成word格式
- GCD学习之——dispatch_once
- linux connect超时方法