首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

POJ 1006 Biorhythms:中國剩餘定理求三周期同峰日

     編輯:關於C++

問題背景

三大生理周期:身體 23 天、情緒 28 天、智力 33 天。給定近期三個峰值出現日 p, e, i 及當前日 d,求下一次三峰同步的天數(不計當天)。

數學模型:同餘方程組

設下一次同峰距今 N 天,則 N+d 滿足:

N + d ≡ p (mod 23)
N + d ≡ e (mod 28)
N + d ≡ i (mod 33)

即求最小正整數 S = N+d 滿足上述同餘,答案 N = (S - d) mod LCM(23,28,33)。LCM = 21252。

中國剩餘定理構造解

找到三個基礎解:

  • M1 = 5544:≡1 (mod 23),≡0 (mod 28),≡0 (mod 33)
  • M2 = 14421:≡0 (mod 23),≡1 (mod 28),≡0 (mod 33)
  • M3 = 1288:≡0 (mod 23),≡0 (mod 28),≡1 (mod 33)

則通解 S = (5544*p + 14421*e + 1288*i) % 21252。若 S ≤ d 則加 21252。

代碼實現


原理說明

每個基礎解構造利用:某模數下餘 1,其餘模數下整除。線性組合後,模各模數餘數分別為 p, e, i。模 LCM 取最小正解即為最近同峰日。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved