n个数的最大公约数和最小公倍数

Posted Latticeeee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了n个数的最大公约数和最小公倍数相关的知识,希望对你有一定的参考价值。

Po主刚刚考完计算概论....心情低落...

好气啊..昨天看到这题了...今天还是脑子一团浆糊....TAT

 

总结一发,吸取教训!努力学习!!

 

//题目描述:

      第一行输入,n

      第二行输入n个数,输出这n个数的最大公约数和最小公倍数。

先求两个数的公因数。

辗转相除法原理:假设我们要求的是x和y的最大公约数(x>y),x可以表示为x=ay+b,那么x和y的公约数c也必能整除b,即x和y的公约数和y和b的公约数是相同的,若一直取除数和余数作为新的x和y,直到y是x的因数,此时y就是最大公约数(最大公约数不可能比两个数的最小数大)。//考试的时候就是这里有些没想清楚,光想着背代码了

int gys(int x,int y){
    int b;
    if(x<y){     //将大的数排在前面 
        b=x;
        x=y;
        y=b;
    }
    while(x%y!=0){         //一直循环直到y是x的因数 
        b=x%y; 
        x=y;                     // 不断取除数 作为x 
        y=b;                    //不断取余数 作为y                        
    }
    return y;                   //当y是x的因数时,y就是最大公因数 
}

有了两个数的最大公因数,最小公倍数就好办了。

int gbs(int x,int y){
    int result=(x*y)/(gys(x,y));
    return result;
}

那怎么求n个数的最大公因数和最小公倍数呢?//这里我考试的时候也没想清楚...我好菜啊QAQ

这样子考虑,当n=1的时候,最大公因数和最小公倍数都是第一个数a;

                     当n=2的时候,最大公因数和最小公倍数是第一个数a和第二个数b的最大公因数x和最小公倍数y。

                      当n=3的时候,最小公倍数就是y和第三个数c的最小公倍数,这很好理解;那么最大公因数呢?就是x与c的最大公因数   //没想到啊当时脑子太乱了TAT

int main(){
int n;
scanf("%d",&n);
int i,x,y;
scanf("%d",&x);
int gyshu=x,gbshu=x;
for(i=1;i<n;i++){
    scanf("%d",&y);
    gyshu=gys(gyshu,y);
    gbshu=gbs(gbshu,y);
}
printf("%d %d",gyshu,gbshu);
} 

写完发现好简单啊!!!!

我的心在滴血!!!

欲哭无泪!!!

贴一个总代码:

#include <stdio.h>  
#include <malloc.h>
 //碾除法 

int gys(int x,int y){
    int b;
    if(x<y){     //将大的数排在前面 
        b=x;
        x=y;
        y=b;
    }
    while(x%y!=0){         //一直循环直到y是x的因数 
        b=x%y; 
        x=y;                     // 不断取除数 作为x 
        y=b;                    //不断取余数 作为y                        
    }
    return y;                   //当y是x的因数时,y就是最大公因数 
}

int gbs(int x,int y){
    int result=(x*y)/(gys(x,y));
    return result;
}    

int main(){
int n;
scanf("%d",&n);
int i,x,y;
scanf("%d",&x);
int gyshu=x,gbshu=x;
for(i=1;i<n;i++){
    scanf("%d",&y);
    gyshu=gys(gyshu,y);
    gbshu=gbs(gbshu,y);
}
printf("%d %d",gyshu,gbshu);
} 
    

很难过了,但是还是要去复习集合论与图论,毕竟周二还要考试 :)。

以上是关于n个数的最大公约数和最小公倍数的主要内容,如果未能解决你的问题,请参考以下文章

C++实现求N个数的最大公约数和最小公倍数

n个数最大值,最小值,和

python 求n个数最大值 最小值

小白.C语言怎么求多个数的最大值

C语言程序设计:求n个数的最小公倍数。

华为机试真题 C++ 实现最大N个数与最小N个数的和