本文共 1303 字,大约阅读时间需要 4 分钟。
题目链接:
若干个 p , e , i , d p,e,i,d p,e,i,d。已经知道
{ ( d + x ) ≡ p ( m o d 23 ) ( d + x ) ≡ e ( m o d 28 ) ( d + x ) ≡ i ( m o d 33 ) \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) 求最小的 x x xm = ∏ i = 1 n m i , M i = m / m i , M i t i ≡ 1 ( m o d m i ) m=\prod_{i=1}^nm_i,M_i=m/m_i,M_it_i\equiv 1(mod\ m_i) m=∏i=1nmi,Mi=m/mi,Miti≡1(mod mi)然后对于方程
{ x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) . . . x ≡ a n ( m o d m n ) \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 = 1 N a i M i , t i x=\sum_{i=1}^Na_iM_i,t_i x=i=1∑NaiMi,ti因为3个 m m m是固定的,所以直接中国剩余定理计算公式就好了。
a n s = ( 5544 ∗ p + 14421 ∗ e + 1288 ∗ i − d + 21252 ) % 21252 ans=(5544*p+14421*e+1288*i-d+21252)\%21252 ans=(5544∗p+14421∗e+1288∗i−d+21252)%21252#include#include #include 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); }}
转载地址:http://ozkaf.baihongyu.com/