穷举法求最大公约数和最小公倍数

穷举法(也叫枚举法),穷举法求两个正整数的最大公约数的解题步骤:

从两个数中较小数开始由大到小列举,直到找到公约数立即中断列举,得到的公约数便是最大公约数 。

①定义1:对两个正整数a,b如果能在区间[a,0]或[b,0]内能找到一个整数temp能同时被a和b所整除,则temp即为最大公约数。

int divisor (int a,int b) 
{
    int  temp;          
    temp=(a>b)?b:a;    //采种条件运算表达式求出两个数中的最小值
    while(temp>0)     
    {
        if (a%temp==0&&b%temp==0) //只要找到一个数能同时被a,b所整除,则中止循环
            break;    
        temp--;      //如不满足if条件则变量自减,直到能被a,b所整除
    }
    return (temp); //返回满足条件的数到主调函数处
}

②定义2:对两个正整数a,b,如果若干个a之和或b之和能被b所整除或能被a所整除,则该和数即为所求的最小公倍数。

int multiple (int a,int b)
{
    int p,q,temp;
    p=(a>b)?a:b;   //求两个数中的最大值
    q=(a>b)?b:a;  //求两个数中的最小值
    temp=p;      //最大值赋给p,为变量自增作准备
    while(1)   //利用循环语句来求满足条件的数值
    {
        if(p%q==0)
            break;  //只要找到变量的和数能被a或b所整除,则中止循环
        p+=temp;   //如果条件不满足则变量自身相加
    }
    return  (p);
}
int main()
{
    int m,n,t1,t2;
    printf("please input two integer number:");
    scanf_s("%d%d",&m,&n);
    t1=divisor(m,n);
    printf("The highest common divisor is %d\n",t1);
    t2=multiple(m,n);
    printf("The least common multiple is %d\n",t2);
    return 0;
}

你可能感兴趣的:(算法专题)