1. 程式人生 > >【中國剩餘定理】終於弄懂剩餘定理了

【中國剩餘定理】終於弄懂剩餘定理了

【茅塞頓開……這麼簡單的東西我居然剛懂】//中國古代求解一次同餘式組(見同餘)的方法。是數論中一個重要定理。又稱中國剩餘定理。

//中國剩餘定理的結論:
//令任意固定整數為M,當M/A餘a,M/B餘b,M/C餘c,M/D餘d,…,M/Z餘z時,這裡的A,B,C,D,…,Z為除數,除數為任意自然數([span]如果為0,沒有任何意義,如果為1,在孫子定理中沒有計算和探討的價值,所以,不包括0和1)時;餘數a,b,c,d,z為自然整數時。
//1、當命題正確時,在這些除數的最小公倍數內有解,有唯一的解,每一個最小公倍數內都有唯一的解;當命題錯誤時,在整個自然數範圍內都無解。
//2、當M在兩個或兩個以上的除數的最小公倍數內時,這兩個或兩個以上的除數和餘數可以定位M在最小公倍數內的具體位置,也就是M的大小。
//3、正確的命題,指沒有矛盾的命題:分別除以A,B,C,D,…,Z不同的餘數組合個數=A,B,C,D,…,Z的最小公倍數=不同的餘數組合的迴圈週期.
//一個數被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×4=34,就是所求的數。
//POJ 1006 Biorhythms
//Memory Time 
//256K   94MS 

#include<iostream>
using namespace std;

int main(void)
{
	int p,e,i,d;
	int time=1;
	while(cin>>p>>e>>i>>d)
	{
		if(p==-1 && e==-1 && i==-1 && d==-1)
			break;

		int lcm=21252;  // lcm(23,28,33)
		int n=(5544*p+14421*e+1288*i-d+21252)%21252;
		if(n==0)
			n=21252;
		cout<<"Case "<<time++<<": the next triple peak occurs in "<<n<<" days."<<endl;
	}
	return 0;
}