这篇用三种方法求n个数的最大公因数,两种方法求n个数的最小公倍数
一.代码的完成
//求最大公因数和最小公倍数
//功能:用三种方法实现求n个数之间的最大公因数,两种方法求n个数之间的最小公倍数
//语言:C++
//作者:软工1502班 贺雪1508010208
//时间:2017年3月18日
#include<iostream>
using namespace std;
//短除法
int Sd_gcd(int num1,int num2,int p) //p为返回值选择标识符
{
int maxDiv = 1; //最大公因数赋初值
for(int i = 2; i <= num1; i ++) //2为最小质数
{
while((num1 % i == 0) && (num2 % i == 0)) //求两个数的公共因数
{
maxDiv = maxDiv * i; //公共因数相乘
num1 = num1 / i;
num2 = num2 / i;
}
}
if(p==1)
return maxDiv;
else
return maxDiv * num1 * num2;
}
//相减法
int Se_gcd(int num1,int num2)
{
int maxDiv = 1; //最大公因数赋初值
int i=1;
while(i!=0&&num1-num2!=0) //差等于0结束,maxDiv为等于零前一个值
{
if(num1>num2) //大的减去小的
i=num1-num2;
else
i=num2-num1;
maxDiv = i; //差赋给因数
if(num1>i) //交换位置,始终保持大的减小的
num1=i;
else
num2=i;
}
return maxDiv;
}
//辗转相除法
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 x,y,p;
int maxDiv1,maxDiv2,maxDiv3;
int n; //输入个数标识
cout<<"求最大公因数还是最小公倍数:1.最大公因数 2.最小公倍数:";
cin>>p;
if(p==1)