编写程序,应用欧几里得算法求n个整数的最大公约数
1)n个整数最大公约数性质
对于3个或3个以上的整数,最大公约数有以下性质:
(a1,a2,a3) = ((a1,a2),a3)
(a1,a2,a3,a4)=((a1,a2,a3),a4)
应用这一性质,要求n个整数的最大公约数,先求出前n-1个数的最大公约数b,再求第n个数与b的最大公约数;要求n-1个数的最大公约数,先求出前n-2个数的最大公约数b,再求第n-1个数与b的最大公约数,以此类推。
因此,要求n个整数的最大公约数,需应用n-1次欧几里得算法来完成
2)确定算法
设置k(1~n-1)循环,完成n-1次欧几里得算法,最后输出所求结果。
//求n个整数的最大公约数
#include<stdio.h>
main()
{
int k,n;
long a,b,c,r,m[100];
printf("请输入整数个数n: "); //输入原始数据
scanf("%d",&n);
printf("请依次输入%d个整数:",n);
for(k=0;k<=n-1;k++)
{
printf("\n请输入第%d个整数:",k+1);
scanf("%ld",&m[k]);
}
b = m[0];
for(k=0;k<=n-1;k++) //控制应用n-1次欧几里得算法
{
a=m[k];
if(a<b) //交换a、b,确保a>b
{
c=a;
a=b;
b=c;
}
r=a%b;
while(r!=0) //实施“辗转相除法”
{
a=b;
b=r;
r=a%b;
}
}
printf("(%ld",m[0]); //输出求解结果
for(k=1;k<=n-1;k++)
printf(",%ld",m[k]);
printf(")=%ld\n",b);
}