最大公约数和最小公倍数

小乐乐最近在课上学习了如何求两个正整数的最大公约数与最小公倍数,但是他竟然不会求两个正整数的最大公约数与最小公倍数之和,请你帮助他解决这个问题。


辗转相除法

#include 
int main(){
    //辗转相除法
    //大小%小数 余数给小数 小数给大数 余数为0结束 大数是最大公倍数
    long num1,num2;
    long max,min;
    long maxgy,mingb;
    long temp;
    long result;
    scanf("%d%d",&num1,&num2);
    max = num1;
    min = num2;
    if(num1<num2){
        max = num2;
        min = num1;
    }
    while(temp){
        temp=max%min;
        max= min;
        min= temp;
    }
    maxgy = max;
    mingb = (num1*num2)/max;
    result = maxgy+mingb;
    printf("%ld",result);
    return 0;
}

更相减损术

int main(){
    //更相减损术
    //大数-小数 差给小数 小数给大数 小数与差相等结束 小数是最大公约数
    long num1,num2;
    long max,min;
    long maxgy,mingb;
    long temp;
    long result;
    scanf("%d%d",&num1,&num2);
    max = num1;
    min = num2;
    if(num1 < num2){
        max = num2;
        min = num1;
    }
    if(max%min==0){
        maxgy = min;
    }else{
        while(1){
        temp = max-min;
        max = min>temp?min:temp;
        min = min>temp?temp:min;
        if(min == max-min) break;
        }
         maxgy = min;
    }
    mingb = (num1*num2)/maxgy;
    result = maxgy+mingb;
    printf("%ld",result);
}

穷举法

#include 
int main(){
    //采用穷举法求最大公约数
    //从最小数开始找,依次递减找出 大数%t==0 && 小数%t==0
    long num1,num2;
    long max,min;
    long maxgy,mingb;
    long result;
    long temp;
    scanf("%d%d",&num1,&num2);
    max = num1;
    min = num2;
    if(num1<num2){
        max = num2;
        min = num1;
    }
    temp = min;
    for(;temp>0;temp--){
        if(max%temp==0 && min%temp==0){
            break;
        }
    }
    maxgy = temp;
    mingb = (num1*num2)/maxgy;
    result = maxgy+mingb;
    printf("%ld",result);
}

最小公倍数

  • 两数相乘/最大公约数
  • 小数的n倍%大数==0
#include 
int main(){
    long num1,num2;
    long max,min;
    long mingb;
    long temp;
    scanf("%d%d",&num1,&num2);
    max = num1;
    min = num2;
    if(num1<num2){
        max = num2;
        min = num1;
    }
    temp = min;
    while(temp%max!=0){
        temp+=min;
    }
    mingb = temp;
    printf("%d",mingb);
} 
全部评论

相关推荐

首先,什么是双非呢,所谓双非,就是双和非组成的一个词,双是指什么呢?非又指什么呢?这是件很可怕的事,因为我们不能确切地知道这是什么,如果我们知道了,我们就不会不知道。但我要事先声明,我不是这方面的专家,但我还是想要发表一下我的观点,在我仔细看过这个问题经过长时间的思考后,我其实也不知道要怎么回答,正如我一开始说的,我不是这方面的专家,你只需要记住,鱼越大,刺越大;刺越大,肉越少;肉越少,刺越小;刺越小,鱼越小,所以鱼越大,鱼越小。
水流花开:面对这个问题,我们需要拿出新水平、达到新境界,通过新举措、新发展,形成新突破,为此,我们必须重视新方法、看清新形式、理准新要求,只有这样,我们才能在新期待、新关系中,用好新本领、展现新风貌、走出新高度,新知识造就新事物、新实践获得新成果。一定要认识到其中的重要性,明了紧迫性、坚持自觉性、拿出主动性,以全局性、前瞻性的眼光把握时代性、坚持实践性,特别要有针对性,面对战路性、长期性的任务,我们需要考虑到其复杂性与艰巨性,调动积极性与创造性,有计划性、敏税性的干好事情。同时,不能遗忘规范化、程序化与制度化的重要程度,只有在有序化、科学化、知识化、专业化的条件下,我们才能用排除法
点赞 评论 收藏
分享
ricardo_lee:双非本走人工智能,只能说机会约等于无
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务