最大公约数-----欧几里得算法
Posted 砂糖橘子君
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最大公约数-----欧几里得算法相关的知识,希望对你有一定的参考价值。
欧几里得算法:
如果求两个数的最大公约数,那么最一般的求法是设置一个变量i=1,然后i不断加一,如果i加到某个数后两个数都能整除这个数了,然后把这个变量保存下来,然后最后的结果中最大的就是最大公约数.
然而这种方法时间复杂度可想而知有多高,所以一般情况瞎并不用这种方法,那么就有下面的欧几里得算法:
输入:两个数 a,b
输出:两个数的最大公约数 c
欧几里得算法:(1)找出两个数中最大的和最小的,分别为tmax、tmin,
(2)不断令设置一个变量t代表tmin,tmin赋值为tmax mod(%) tmin,然后再将t赋值给tmax
(3)当tmin等于0的时候退出循环
剩下的tmax就是最大公约数
证明过程可以参考刘汝佳的《算法设计竞赛入门经典》第二版
代码如下:
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 using namespace std; 5 6 int gcd(int a,int b){ 7 int tmax = a>b?a:b; 8 int tmin = a<b?a:b; 9 while(tmin){ 10 int t= tmax % tmin; 11 tmax = tmin; 12 tmin = t; 13 } 14 return tmax; 15 }
以上是关于最大公约数-----欧几里得算法的主要内容,如果未能解决你的问题,请参考以下文章