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);
} 
    

很難過了,但是還是要去復習集合論與圖論,畢竟周二還要考試 :)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM