1 迭代法求最大公约数
/*迭代法求最大公约数
*原理:m n r;将r赋值给n,n赋值给m
*/
#include <iostream>
using namespace std;
int Gcd(int m, int n) {
int r;
r = m%n;
while(r) {
m = n;
n = r;
r = m%n;
}
return n;
}
int main(){
int m, n;
cin >> m >> n;
cout<< Gcd(m, n);
return 0;
}
简化版写法:
#include <iostream>
using namespace std;
int gcd(int m, int n){
if(n==0) return m;//如果其中有一个数为0,那么最大公约数就为那个非0的数
return gcd(n, m%n);//原理:m n r=m%n;将r的值放到给n的位置,n的值放到m的位置
}
int main(){
int a, b;
cin >> a >> b;
cout << gcd(a, b);
return 0;
}
2 欧几里德递归算法求最大公约数
/*欧几里德递归算法求最大公约数*/
#include <iostream>
using namespace std;
int Gcd(int m, int n);
int RGcd(int m, int n) {
if(m==0) return n;
return Gcd(n%m, m);
}
int Gcd(int m, int n) {
if(m > n) {
int t = m;
m = n;
n = t;
}
return RGcd(m, n);
}
int main(){
int m, n;
cin >> m >> n;
cout<< Gcd(m, n);
return 0;
}
3 连续的整数的检测算法求最大公约数
/*连续的整数的检测算法求最大公约数*/
#include <iostream>
using namespace std;
int Gcd(int m, int n) {
if(m==0) return n;
if(n==0) return m;
int t = m > n ? n: m;//把较小的那个数赋值给t
while(m%t || n%t)
t--;
return t;
}
int main(){
int m, n;
cin >> m >> n;
cout<< Gcd(m, n);
return 0;
}