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

来源:互联网 发布:sql随机11序号 编辑:程序博客网 时间:2024/04/29 13:19

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

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

①定义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;}