#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个数的最大公约数,最小公倍数。

n个数的最大公约数 最小公倍数

二、测试,调试,运行结果

   (1)测试divior()函数

测试代码:

int a=9,b=132;

int x=divior(a,b);

printf(“最大公约数为:%d”,x);

n个数的最大公约数 最小公倍数

        (2)测试mutiple()函数

int a=9,b=132;

int x=mutiple(a,b);

printf(“最小公倍数为:%d”,x);

n个数的最大公约数 最小公倍数

 

      (3)运行结果:

n个数的最大公约数 最小公倍数

 

 

三、总结:

   1:熟练的运用了辗转相除法求最大公约数,最小公倍数。

2:对n个数求解最大公约数,最小公倍数有了基本认识,采用循环分次求解,得最终结果。

3:了解了最大公约数和最小公倍数之间的关系。

相关文章: