输入两个正整数m和n,求其最大公约数和最小公倍数
首先是求其最大公约数的代码:
通过辗转相除法:
#include<iostream> using namespace std; int MaxY(int a,int b){ int min,max; max=a>b?a:b; min=a<b?a:b; if(max%min==0) return min; else return MaxY(min,max%min); } int main(){ int a,b; cout<<"请输入两个正整数:"; cin>>a>>b; cout<<"最大公约数是:" ; cout<<MaxY(a,b); cout<<endl; return 0; }
通过更相减损术:
#include<iostream> using namespace std; int MaxY(int a,int b){ int min,max; max=a>b?a:b; min=a<b?a:b; if(max-min==min) return min; else return MaxY(min,max-min); } int main(){ int a,b; cout<<"请输入两个正整数:"; cin>>a>>b; cout<<"最大公约数是:" ; cout<<MaxY(a,b); cout<<endl; return 0; }
最小公倍数,等于两个数的积除以最大公约数,以辗转相除法求最大公约数,再求最小公倍数为例:
#include<iostream> using namespace std; int MaxY(int a,int b){ int min,max; max=a>b?a:b; min=a<b?a:b; if(max%min==0) return min; else return MaxY(min,max%min); } int main(){ int a,b,y; cout<<"请输入两个正整数:"; cin>>a>>b; cout<<"最大公约数是:" ; y=MaxY(a,b); cout<<y<<endl; cout<<"最小公倍数是:"; cout<<((a*b)/y); cout<<endl; return 0; }