題目:“今有物不知其數,三三數之剩二,五五數之剩三,七七數之剩二,問物幾何?”
按照今天的話來說:一個數除以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);
}
親!!好好比對額,所有的都是一致的額..