POJ1006-Biorhythms【中国剩余定理】
正題
題目鏈接:http://poj.org/problem?id=1006
題目大意
若干個p,e,i,dp,e,i,dp,e,i,d。已經知道
{(d+x)≡p(mod23)(d+x)≡e(mod28)(d+x)≡i(mod33)\left\{\begin{matrix} (d+x)\equiv p(mod\ 23) \\ (d+x)\equiv e(mod\ 28) \\ (d+x)\equiv i(mod\ 33) \end{matrix}\right.????(d+x)≡p(mod?23)(d+x)≡e(mod?28)(d+x)≡i(mod?33)?
求最小的xxx
中國剩余定理
m=∏i=1nmi,Mi=m/mi,Miti≡1(modmi)m=\prod_{i=1}^nm_i,M_i=m/m_i,M_it_i\equiv 1(mod\ m_i)m=∏i=1n?mi?,Mi?=m/mi?,Mi?ti?≡1(mod?mi?)然后對于方程
{x≡a1(modm1)x≡a2(modm2)...x≡an(modmn)\left\{\begin{matrix} x\equiv a_1(mod\ m_1) \\ x\equiv a_2(mod\ m_2) \\ ... \\ x\equiv a_n(mod\ m_n) \end{matrix}\right.????????x≡a1?(mod?m1?)x≡a2?(mod?m2?)...x≡an?(mod?mn?)?
有
x=∑i=1NaiMi,tix=\sum_{i=1}^Na_iM_i,t_ix=i=1∑N?ai?Mi?,ti?
解題思路
因為3個mmm是固定的,所以直接中國剩余定理計算公式就好了。
ans=(5544?p+14421?e+1288?i?d+21252)%21252ans=(5544*p+14421*e+1288*i-d+21252)\%21252ans=(5544?p+14421?e+1288?i?d+21252)%21252
codecodecode
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int p,e,i,d,ans,t; int main() {while(scanf("%d%d%d%d",&p,&e,&i,&d)){if(d<0) return 0;t++; ans=(5544*p+14421*e+1288*i-d+21252)%21252;if(!ans) ans=21252;printf("Case %d: the next triple peak occurs in %d days.\n",t,ans);} }總結
以上是生活随笔為你收集整理的POJ1006-Biorhythms【中国剩余定理】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么设置路由器宽带限制ip地址段路由器怎
- 下一篇: 电脑卡了怎么办正在做表格电脑卡了怎么办