求n个数的最小公约数以及最大公约数

#include "pch.h"
#include<iostream>
using namespace std;

int Ea_gcd(int num1, int num2)   //辗转相除法

{
	int maxDiv = 1;     //最大公因数赋初值
	int Rem;   //余数
	while (num2 > 0)
	{
		Rem = num1 % num2;
		num1 = num2;
		num2 = Rem;
	}
	return num1;
}

int main()
{
	int m = 1;  //m为选择标识
	int a[10000];  //定义足够大的空间
	cout << "求最大公约数和最小公倍数" << endl;
	cout << endl;
	while (m == 1)
	{
		int  p, j;
		int maxDiv1;
		int n;  //输入个数标识
		cout << "求最大公因数还是最小公倍数:1.最大公因数 2.最小公倍数:";
		cin >> p;
		if (p == 1)  //求最大公因数
		{
			cout << "输入的整数的个数:";
			cin >> n;
			cout << "输入数字:";
			for (int j = 0; j < n; j++)   //输入
			{
				cin >> a[j];
			}
			//前两个数进行比较
			maxDiv1 = Ea_gcd(a[0], a[1]);   //辗转相除法
			cout << endl;
			for (j = 2; j < n; j++)   //两两进行比较
			{
				maxDiv1 = Ea_gcd(maxDiv1, a[j]);   //辗转相除法
			}
			cout << endl;
			cout << "最大公因数是(辗转相除法):" << maxDiv1 << endl;
			cout << endl;
			cout << "请选择:1.继续计算 2.结束:";   //选择结束或继续
			cin >> m;
			cout << endl;
		}
		else
		{
			int s;
			int minMul;  //最小公倍数
			int a[10000];  //定义足够大的空间
			int n;  //输入个数标识
			cout << "输入的整数的个数:";
			cin >> n;
			cout << "输入数字:";
			for (int j = 0; j < n; j++)   //输入
			{
				cin >> a[j];
			}


			//最小公倍数等于短除法所有质数相乘,即最大公因数乘两数剩余的两个质数
			minMul = Ea_gcd(a[0], a[1]);
			for (j = 2; j < n; j++)   //两两进行比较
			{
				minMul = Ea_gcd(minMul, a[j]);
			}
			cout << endl;
			cout << "最小公倍数是(质数相乘):" << minMul << endl;


			//最小公倍数等于两个数之积除以最大公因数
			s = (a[0] * a[1]) / Ea_gcd(a[0], a[1]);  //也可调用Se_gcd(),即用相减法计算最大公因数
			for (int i = 2; i < n; i++)   //两两比较
			{
				s = ((s*a[i]) / Ea_gcd(s, a[i]));
			}
			cout << "最小公倍数是(两数之积除以最大公因数):" << s << endl;
			cout << endl;
			cout << "请选择:1.继续计算 2.结束:";   //选择结束或继续
			cin >> m;
			cout << endl;
		}
	}
	return 0;
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值