gcd用于求最小公约数,lcm求最大共倍数。
ngcd求n个数的最小公约数,nlcm求n个数的最大共倍数
#include <iostream>
using namespace std;
int gcd(int a,int b){ //两个数的最大公约数
return b==0?a:gcd(b,a%b);
}
int lcm(int a,int b){//最小公倍数 = 两数乘积 / 最大公约数
return a*b/gcd(a,b);
}
int nlcm(int a[],int n){ //N个数的最小公倍数
return n==1?a[0]:(lcm(a[n-1],nlcm(a,n-1)));
}
int ngcd(int a[],int n){//N个数的最大公约数
return n==1?a[0]:(gcd(a[n-1],ngcd(a,n-1)));
}
int main(){
int a,b,n,rgcd,rlcm,rngcd,rnlcm;
int pa[10],i;
cout<<"please input tow number:"<<endl;
cin>>a>>b;
rgcd=gcd(a,b);
rlcm=lcm(a,b);
cout<<"最大公约数是:\n"<<rgcd<<endl;
cout<<"最小公倍数是:\n"<<rlcm<<endl;
cout<<"please input the n:"<<endl;
cin>>n;
for (i=0;i<n;i++)
cin>>pa[i];
rngcd=ngcd(pa,n);
rnlcm=nlcm(pa,n);
cout<<"最大公约数是:\n"<<rngcd<<endl;
cout<<"最小公倍数是:\n"<<rnlcm<<endl;
return 0;
}