HW3_15

//输入两个正整数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;
}

你可能感兴趣的:(HW3_15)