首页 > 编程知识 正文

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

时间:2023-05-04 04:39:04 阅读:262907 作者:160

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

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。