#include <stdio.h>
int divisor (int a,int b) /*自定义函数求两数的最大公约数*/
{
int temp;
if(a<b)
{ temp=a;a=b;b=temp;}
while(b!=0)
{
temp=a%b;
a=b; /*变量数值交换*/
b=temp;
}
return (a); /*返回最大公约数到调用函数处*/
}
int multiple (int a,int b) /*自定义函数求两数的最小公倍数*/
{
int temp;
temp=divisor(a,b); /*再次调用自定义函数,求出最大公约数*/
return (a*b/temp); /*返回最小公倍数到主调函数处进行输出*/
}
void display(int a[],int n) //求n个数的最大公约数,最小公倍数
{
int x=a[0];
int y=0;
for(int i=1;i<n;i++) //循环求
{
y=a[i];
x=divisor(x,y);
}
printf("最大公约数为%d:\n",x);
int p=a[0];
int q=0;
for(int j=1;j<n;j++)
{
q=a[j];
p=multiple(p,q);
}
printf("最小公倍数为%d:\n",p);
}
int main()
{
int a[10000];
int n=0;
printf("请输入要求的个数n\n");
scanf("%d",&n);
for(int i =0;i<n;i++) //输入
{
scanf("%d",&a[i]);
}
display(a,n);
}
一、题目分析
最大公约数:采用展转求余法得2个数的最大公约数。
最小公倍数:先求最大公约数,然后用a*b/最大公约数得两个数的最小公倍数。
N个数的最大公约数,最小公倍数:先取数值前两个数求出最大公约数,最小公倍数,再将求出来的数和下一个数进行最大公约数,最小公倍数求解,以此类推,直到将所有=数都求一遍,最后的结果就是n个数的最大公约数,最小公倍数。
二、测试,调试,运行结果
(1)测试divior()函数
测试代码:
int a=9,b=132;
int x=divior(a,b);
printf(“最大公约数为:%d”,x);
(2)测试mutiple()函数
int a=9,b=132;
int x=mutiple(a,b);
printf(“最小公倍数为:%d”,x);
(3)运行结果:
三、总结:
1:熟练的运用了辗转相除法求最大公约数,最小公倍数。
2:对n个数求解最大公约数,最小公倍数有了基本认识,采用循环分次求解,得最终结果。
3:了解了最大公约数和最小公倍数之间的关系。