算法一
欧几里得算法
输入:两个不全是负数的整数
输出:这两个数的最大公约数
C++语言描述
判断连个数的大小
if(m>=n){
while(m%n!=0){
int temp = m%n;
m = n;
n = temp;
}
std::cout << n << std::endl;
}
else{
while(n%m!=0){
int temp = n%m;
n = m;
m = temp;
}
std::cout << m << std::endl;
}
自然语言描述(当m > n 时)
用较大的数除以较小的数取余,若得到的结果为0,那么就返回较小的数作为最大公约数。反之将上一步中的除数作为被除数,将他们的余数赋值给除数,循环这样做,直至得到的余数为0,最后的除数就是最大公约数
算法二
连续整数检测算法
C++语言描述
t = min(m,n);
while(m%t!=0 && m%t!=0){
if(m%t==0&& n%t==0){
return t;
}
else t--;
}
自然语言描述
基于最大公约数的定义:同时整除两个整数的最大整数
显然不会大于两数较小者,t = min(m,n);
然后循环让 m%t 和 n%t 若两个同时取余为零,说明t是它两最大公约数,反之t-1循环 m%t 和 n%t