POJ 1006 與中國剩餘定理

2021-07-06 08:21:57 字數 1853 閱讀 3532

要點:

設num為下乙個triple peak出現的時間。則可以得到以下三個等式:

num%23==p;num%28==e;num%33==i;

使用暴力列舉法會遇到問題:如當p>23時無法用%得到p,但這裡學到了一種新演算法———中國剩餘定理演算法,可繞過這個問題。

中國剩餘定理介紹:

《孫子算經》中有「物不知數」問題:「今有物不知其數,三三數之餘二 ,五五數之餘三 ,七七數之餘二,問物幾何?」答為「23」。

——–這個就是傳說中的「中國剩餘定理」。 其實題目的意思就是,n % 3 = 2, n % 5 = 3, n % 7 = 2; 問n是多少?

那麼他是怎麼解決的呢?

首先題目中涉及三個互質的數3,5,7.

令:5*7*a%3=1—————————>a=2,即5*7*2=70

3*7*b%5=1—————————>b=1,即3*7*1=21

3*5*c%7=1—————————>c=1,即3*5*1=15

(這邊都是前兩個數相乘除以剩下的那個數,如3乘5除7)

若p=4,4>3,5*7*a除3餘4依然a=2

為什麼要使餘數為1:是為了要求餘數2的話,只要乘以2就可以,要求餘數為3的話,只要乘以3就可以!

( 因為題目想要n % 3 =2, n % 5 =3, n % 7 =2; )

那麼:要使得n % 3 = 2,那麼( 5 * 7 * 2 )*2 % 3 = 2;

同理: 要使得n % 5 = 3,那麼( 3 * 7 * 1 )*3 % 5 = 3;

同理:要使得n % 7 = 2,那麼( 3 * 5 * 1 )* 2 % 7 = 2;

那麼現在將( 5 * 7 * 2 )* 2和( 3 * 7 * 1 )* 3和( 3 * 5 * 1 )* 2相加會怎麼樣呢?我們知道

( 5 * 7 * 2 )* 2可以被5和7整除,但是%3等於2

( 3 * 7 * 1 )* 3可以被3和7整除,但是%5等於3

( 3 * 5 * 1 )* 2可以被3和5整除,但是%7等於2

相加為[( 5 * 7 * 2 )* 2+( 3 * 7 * 1 )* 3+( 3 * 5 * 1 )* 2]

這個數除以3時第乙個分式餘2,後面兩個都整除餘0,相加得2

同理可知除5餘3,除7餘2

得到值為233,但這個值不是最小值,它可以減去3*5*7的倍數而不改變除3, 5,7時的餘數,因為3*5*7的倍數可以整除餘0,無論減多少個都不會改變餘數

現在看看此題:num % 23 == p;num % 28 == e; num % 33 == i;求num

按照以上演算法:

使 33 * 28 * a % 23 = 1,得a = 6; 33 * 28 * 6 = 5544;

使23 * 33 * b % 28 = 1, 得b = 19;23 * 33 * 19 = 14421;

使23 * 28 * c % 33 = 1, 得c = 2; 23 * 28 * 2 = 1288。

a,b,c的值是怎麼算出來的呢?

以第乙個為例,先求出33*28%23=4,根據前面餘數可以加倍的原則4*a%23=1,得到a=6

那麼根據中國剩餘定理:

num=5544*p+14421*e+1288*i; num-d為所求的答案

因為有範圍限制,那麼(x-d) %= 21252;且如果此時<=0,那麼(x-d) += 21252,保證最後答案在1-21252之內

#include

int main()

return

0;}

學習心得:

1.學習到了中國剩餘定理這一基本演算法

中國剩餘定理(孫子定理) POJ 1006

中國剩餘定理可以描述為 若某數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除...

POJ 1006 中國剩餘定理

初見poj1006用的暴力破解寫的 寫完以後發現很搓。上網一查原來古人早就對此類問題有了解答規則。一 中國剩餘定理 一元線性同餘方程組問題最早可見於中國南北朝時期 公元5世紀 的數學著作 孫子算經 捲下第二十六題,叫做 物不知數 問題,原文如下 有物不知其數,三三數之剩二,五五數之剩三,七七數之剩二...

poj 1006(中國剩餘定理)

中國剩餘定理 孫子算經 中有 物不知數 問題 今有物不知其數,三三數之餘二 五五數之餘三 七七數之餘二,問物幾何?答為 23 這個就是傳說中的 中國剩餘定理 其實題目的意思就是,n 3 2,n 5 3,n 7 2 問n是多少?那麼他是怎麼解決的呢?看下面 題目中涉及 3,5,7三個互質的數 令 5 ...