求N个数的最大公约数和最小公倍数

程序设计作业

题目:求N个数的最大公约数和最小公倍数。

分析:求多个数的问题可以转换成多个两个数之间的问题,利用随机函数产生多个数保存在数组中,然后先求出前两个数的最大公约数(最小公倍数),然后用求出的数再和下一个进行运算,就这样一直运算下去,结果就出来了。

流程图:

调试过程:

产生随机数20个:

 

20个数的最小公倍数:

20个数的最大公约数:

 

 

 

运行结果:

源代码:

​
#include <stdio.h> 
#include<time.h>//时间函数,获得时间信息的函数
#include<stdlib.h>//随机数生成函数
#include<math.h>//数学函数,程序后面用于计算次方
#define N 20
//获取两个数的最大公约数 
int GCD(int a,int b)
{ 
	int temp; 
	if(a < b)
	{
		temp = a; 
		a = b; 
		b = temp; 
	} 
	if(a%b == 0)
		return b; 
	else 
		return GCD(b,a%b); 
} 
//获得多个数的最小公倍数 
int min(int* arry,int size)
{
	int x,y,num=arry[0],i,gcd; //取数组的第一和第二个数,计算它们的公倍数,然后再取第三个数, 和之前的公倍数计算它们的公倍数,直到只有一个数。 
	for(i=0;i<size;i++)
	{
		x=arry[0]; 
		y=arry[i+1]; 
		//计算公约数 
	gcd = GCD(x,y); 
	//计算公倍数 
	num = x/gcd * y/gcd * gcd; 
	} 
	return num; 
}
//计算多个数的最大公约数 
int max(int *arry,int size)
{
	int gcd1=0;
	int i=0;
	int o=0;
	while(i<size)
	{
		gcd1=GCD(arry[i],arry[++i]);
		o=GCD(gcd1,arry[++i]);
	}
	
	return o;
}
void main()
{ 
	int i,arry[N];//产生随机数,保存在数组中
	srand(time(0));//产生随机数
	printf("产生的随机数为:");
	for(i=0; i<N; i++)
	{
		arry[i] = rand()%500;
		printf("%d   ",arry[i]);
	}
	printf("\n");
	printf("20个随机数的最小公倍数为:\n");
	int a = min(arry,N); 
	printf("%d\n",a); 
	printf("20个随机数的最大公约数为:\n");
	int m = max(arry,N); 
	printf("%d\n",m); 
}

​

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值