Biorhythms 中國剩餘定理

2022-05-01 15:39:10 字數 1257 閱讀 6510

題意

人自出生起就有體力,情感和智力三個生理週期,分別為23,28和33天。乙個週期內有一天為峰值,在這一天,人在對應的方面(體力,情感或智力)表現最好。通常這三個週期的峰值不會是同一天。現在給出三個日期,分別對應於體力,情感,智力出現峰值的日期。然後再給出乙個起始日期,要求從這一天開始,算出最少再過多少天後三個峰值同時出現。

這題是中國剩餘定理終極水題(連模板都算不上)  但是中國剩餘定理一直是我心中的痛。。

在《孫子算經》中有這樣乙個問題:「今有物不知其數,三三數之剩二(除以3餘2),五五數之剩三(除以5餘3),七七數之剩二(除以7餘2),問物幾何?」這個問題稱為「孫子問題」,該問題的一般解法國際上稱為「中國剩餘定理」。具體解法分三步:

找出三個數:從3和5的公倍數中找出被7除餘1的最小數15,從3和7的公倍數中找出被5除餘1 的最小數21,最後從5和7的公倍數中找出除3餘1的最小數70。

用15乘以2(2為最終結果除以7的餘數),用21乘以3(3為最終結果除以5的餘數),同理,用70乘以2(2為最終結果除以3的餘數),然後把三個乘積相加15∗2

+21∗3

+70∗2

'>15∗2+21∗3+70∗2

15∗2+21∗3+70∗2得到和233。

用233除以3,5,7三個數的最小公倍數105,得到餘數23,即233

%105=23

'>233%105=23

233%105=23。這個餘數23就是符合條件的最小數。

使 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。 

那麼x  =  5544 * p + 14421 * e + 1288 * i

#include

#define max 21252

intmain()

n = ( 5544 * p + 14421 * e + 1288 * i - d ) %max;

if( n <= 0 ) //

範圍限制

printf(

"case %d: the next triple peak occurs in %d days.\n

", count, n );

}return0;

}

view code

中國剩餘定理題 Biorhythms

人生來就有三個生理週期,分別為體力 感情和智力週期,它們的週期長度為23天 28天和33天。每乙個週期中有一天是高峰。在高峰這天,人會在相應的方面表現出色。例如,智力週期的高峰,人會思維敏捷,精力容易高度集中。因為三個週期的周長不同,所以通常三個週期的高峰不會落在同一天。對於每個人,我們想知道何時三...

POJ1006 Biorhythms 剩餘定理

從水題開始解題報告。剛開始用一般演算法,從一開始計數判斷。wa了兩次後提交通過。如下 memory 744k time 282ms include using namespace std int main return 0 之後看了一下discuss,認識了剩餘定理。則5544 p 14421 e ...

中國剩餘定理 擴充套件中國剩餘定理

中國剩餘定理 對於求解一元不定方程組 的一種演算法叫做中國剩餘定理。又名孫子定理。其中m1,m2,m3.mk 為兩兩互質的整數,求x的最小非負整數解 令m mi 1 i n m是所有mi的最小公倍數 ti為同餘方程 ti m mi 1 mod mi 的最小非負整數解 則有乙個解 x ai m mi ...