中國剩餘定理
孫子算經裡有這樣乙個問題:「今有物不知其數,三三數之剩二,五五數之剩三,七七數之剩二,問物幾何?」
翻譯成現在的數學問題就是 x%3 == 2
,x%5 == 3
,x%7 == 2,求x
的值;
遇到這這樣乙個問題很多c
語言初學者不禁會想到用暴力可以算出來,還要這樣乙個定理幹嘛?
如果資料相當大呢?計算機就會計算相當困難。然而這個問題早早的就被孫子解決了。
求出3,5,7
兩兩中的最小公倍數
lcm,
k*lcm
與另乙個數
mod等於
1(找出乙個符合條件的k);
用k*lcm*
另乙個沒有在
lcm中的數的等式的餘數
[(有點繞)就是
lcm(3,5),
另乙個數就是7 在
x%7==2
的等式中的餘數 就是
2 即找出這
k*lcm
(3,5
)*2]
求法(剩餘定理思想):
lcm(3,5) = 15; // lcm是最小公倍數
lcm(3,7) = 21;
lcm(5,7) = 35;
a*15%7 == 1;
b*21%5 == 1;
c*35%3 == 1;
可求得a,b,c
的值為1,1,2;
我們可得15%7 == 1 , 21%5 == 1 , 70%3 == 1;
ans = (15*2 + 21*3 + 70*2) % lcm(3,5,7);
ans = 23;
再加乙個例題:
乙個數被3除餘1
,被4除餘2
,被5除餘4
,這個數最小是幾? 題中
3、4、
5三個數兩兩互質。則〔4
,5〕=20;〔3
,5〕=15;〔3
,4〕=12;〔3
,4,5
〕=60。
為了使20被3
除餘1,用20
×2=40;使
15被4除餘
1,用15×
3=45;使
12被5除餘
1,用12×
3=36。
然後,40×1
+45×2
+36×4=274,
因為,274>60;
所以,274%60 = 34
,就是所求的數。
粘個剩餘定理題
poj 1006
題目又上角有中文意思
這道題的解法就是:
已知(ans+d)%23=a; (ans+d)%28=b; (ans+d)%33=c
使33×28×x被23除餘1,用33×28×8 = 5544;
使23×33×y被28除餘1,用23×33×19 = 14421;
使23×28×z被33除餘1,用23×28×2 = 1288。
於是x==8, y==19, z==2;
因此有(5544×a + 14421×b + 1288×c)% lcm(23,28,33) =ans + d
又23、28、33互質,即lcm(23,28,33) = 21252;
所以有ans =(5544×a+14421×b+1288×c-d)% 21252
ac**
#include#includeusing namespace std;
int main()
return 0;
}
這個題暴力也能過
暴力ac**
#include#includeusing namespace std;
int main()
printf("case %d: the next triple peak occurs in %d days.\n", cnt++, i-d);
}return 0;
}
中國剩餘定理(詳解)
中國剩餘定理可以描述為 若某數x 分別被d1 dn除得的餘數為r1 r2 rn,則可表示為下式 x r1r1 r2r2 rnrn rd 其中r1是d2 d3 dn的公倍數,而且被 d1除,餘數為 1 稱為 r1相對於 d1的數論倒數 r1 r2 rn 是d1 d2 dn 1 的公倍數,而且被 dn除...
中國剩餘定理(詳解)
中國剩餘定理可以描述為 若某數x 分別被d1 dn除得的餘數為r1 r2 rn,則可表示為下式 x r1r1 r2r2 rnrn rd 其中r1是d2 d3 dn的公倍數,而且被 d1除,餘數為 1 稱為 r1相對於 d1的數論倒數 r1 r2 rn 是d1 d2 dn 1 的公倍數,而且被 dn除...
中國剩餘定理詳解
中國剩餘定理又叫孫子定理 孫子算經中有問題 今有物不知其數,三三數之剩二,五五數之剩三,七七數之剩二。問物幾何?首先我們容易知道如果x是這個其中的乙個解,那麼x 140 k也是這裡面的解,140是這三個模的最小公倍數,k是整數 運用這個我們可以把三個式子給合併成兩個式子,進而把解表示成k1 2 k2...