#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;
}