最大公约数

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <cmath>
#include <vector>

using namespace std;

//非递归形式 
void gcl(int m,int n){
    int max,min,remainder;
    max = m > n ? m : n;
    min = m < n ? m : n;

    do{
        remainder = max % min ;
        max = min;
        min = remainder;        
    }while(remainder != 0) ;
    
    printf("%d",max);
}

//递归形式
int gcd(int a,int b){
    if(b == 0){
        return a;
    }else{
        return gcd(b,a % b);
    }
}
int main(){
    int m,n;
    while(scanf("%d%d",&m,&n)){
        gcl(m,n);
    }
    return 0;
}

多个数的最大公约数算法 

对这一组数进行排序(从大到小)
对每两个相邻的两个数进行如下操作:设相邻的两个数为A和B(A在前,因为已经排序,所以A > B),如果A = n * B(n为整数),也就是A能够被B整除,那么就令A = B;如果A不能被B整除则令A = A % B。
重复上面两步,直到数组中每个数都相等,则最大公约数就为这个数。

原文地址:https://www.cnblogs.com/juanzhi/p/12901268.html