求两个数的最大公约数的方法很多,如下面的递归法:
int gcd(int n, int m)
{
if (n<m)
{
n=m+n;
m=n-m;
n=n-m;
}
if (m==0) return n;
return gcd(m,n%m);
}
下面我使用数组写了个计算n个数的最大公约数的代码:
int max_common_divisor(int several[], int n)
{
int a=several[0];
int b=several[1];
int c=gcd(a,b);
int i;
for (i=2; i<n; i++)
{
c=gcd(c,several[i]);
}
return c;
}
写个主函数来测试下:
#include <stdio.h>
#include <stdlib.h>
int gcd(int a, int b);//求两个数的最大公约数
int max_common_divisor(int several[], int n);//求n个数的最大公约数
int main()
{
int a[4];
int x,y;
a[0]=147;
a[1]=210;
a[2]=315;
a[3]=84;
printf("最大公约数为:%d\n",max_common_divisor(a,4));
return 0;
}
测试结果如下: