//输入两个正整数m和n,求出他们的最大公约数和最小公倍数 //解:最大公约数用辗转相除法 #include <iostream> using namespace std; int main() { int m,n,max,min; int tempmax,tempmin; cout<<"请输入m和n:"; cin>>m>>n; if(m>=n) { max=m; min=n; } else { max=n; min=m; } tempmax=max;tempmin=min; int temp; //进行辗转相除 while(1) { if(tempmax%tempmin==0) break; temp=tempmax%tempmin; tempmax=tempmin; tempmin=temp; } cout<<endl<<"最大公约数为:"<<tempmin<<endl; cout<<endl<<"最小公倍数是:"<<max*min/tempmin<<endl; //最小公倍数为两数之积除以最大公约数 int maxfactor[100],minfactor[100];//用于存储各自的因子 int commonfactor[100];//记录两个数的公因子 int maxcount,mincount,comcount;//各自的因子计数器 int i; maxcount=0; mincount=0; comcount=0; for(i=1;i<=max;i++) { if(max%i==0) { maxfactor[maxcount]=i; maxcount+=1; } if(min%i==0) { minfactor[mincount]=i; mincount+=1; } if((max%i==0)&&(min%i)==0) { commonfactor[comcount]=i; comcount+=1; } } cout<<max<<"含有的因子为:"<<endl; for(i=0;i<maxcount;i++) { cout<<" "<<maxfactor[i]; } cout<<endl; cout<<min<<"含有的因子为:"<<endl; for(i=0;i<mincount;i++) { cout<<" "<<minfactor[i]; } cout<<endl; cout<<"两者共同含有的因子为:"<<endl; for(i=0;i<comcount;i++) { cout<<" "<<commonfactor[i]; } cout<<endl; return 0; }