#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。
重复上面两步,直到数组中每个数都相等,则最大公约数就为这个数。