题目:求N个整数的最大公约数
解题思路:平时见得比较多的是求两个数的最大公约数,而在这里,是求N个整数的最大公约数。我们可以用求两个整数的最大公约数的辗转相除法来求N个整数的,代码如下:
#include <iostream>
using namespace std;
int gcd(int m, int n){
if (m < n){
m = n^m;
n = n^m;
m = n^m;
}
if (n == 0) return m;
return gcd(n, m%n);
}
int max_divisor(int arr[], int n){
int c = arr[0];
for (int i = 1; i < n; i++){
c = gcd(c, arr[i]);
}
return c;
}
int main(){
int array[] = {85,187,340,442};
int x,y;
cout << "最大公约数为: " << max_divisor(array,sizeof(array)/sizeof(array[0])) << endl;
system("pause");
return 0;
}
也可以先求出N个整数的最小值,让所有数都除以这个最小值,判断是否能够整除,并让最小值每次减去1,知道让所有整数都整除,这样也可以求出最大公约数,代码如下:
#include <