韓信點兵—數論趣題

來源:互聯網
上載者:User

題目:“今有物不知其數,三三數之剩二,五五數之剩三,七七數之剩二,問物幾何?”

          按照今天的話來說:一個數除以3餘2,除以5餘3,除以7餘2,求這個數...

          目前我還不明白孫子定理(中國剩餘定理)..所以給出自己的笨方法...

         解:    設這個數為  n ,   則: n  %  3==2; n % 5==3; n % 7==2;

                   令:n = t1 * 3 + 2;   n = t2 * 5 + 3;   n
= t3 * 7 + 2; 

             
     則: 3 * t1  =  7 * t3 ;   (1)式;

             
             3 * t1 = 5 * t2 + 1;   (2)式;

             
             7 * t3 =  5 * t2 + 1;   (3)式;

             
             由(1)得: (3,7)=1;則 t3 是3的倍數, t1 是 7 的倍數。                         

             
             由(2),(3)式可得 5 * 12 +1 可以整除 3,7,t1, t2;

             
            則  5 * t2  + 1 可以整除  21的一部分倍數 

             
            則  5 * t2  = 21 * k - 1 ( k是整數);那我們現在換種思維來想,可以整除 5 的數無非個位一定是 0,或者5(數論中有證明),

             
            則問題轉化為  21 * k 的結果中個位一定要是 1 或者 6 ;那麼顯然 k 可以是  1, 6, 11, 16, 21,26, 31.... 等式才會成立...

             
           則回到最初的  n 值,n =  5 * t2 + 3  = 21 * k + 2;( k= 1, 6, 11, 16 , 21, 26 ....等差數列)....

             
           所以 n 可以取值  23, 128。。。

代碼實現:

#include<iostream>
using namespace std;
int main(){
    for(int i=1; i<=10000; i++ ){
        if(i%3==2 && i%5==3 && i%7==2)
        cout<<i<<"  ";
    }
    cout<<endl;
    for(int i=1; 21*i+2<=10000; i+=5){
        cout<<21*i+2<<"  ";
    }
    while(1);
}

親!!好好比對額,所有的都是一致的額..

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.