생체 리듬 POJ 1006 (중국 잉여 정리)

원래 제목

주제 링크

주제 분석

이것은 방정식의 타이틀로 알려져이를 해결 될

(X +에서의 d) ≡p (mod23)

(X +에서의 d) ≡e (mod28)

(X + D) ≡i (mod33)

분명히 232,833는 서로 소이므로,이 문제는 단순히 사용 중국인 나머지 정리 결론을 ANS-ANS D = (ANS %의 LCM (23,28,33 마지막으로 ANS-X + (D)를 얻은 후, 및 () + LCM 23,28,33)) LCM (23,28,33)는 여기에 유의, 작은 양의 용액에서 수행 될 수는 시간 ANS에게 때 0 ANS = LCM (23,28,33).

코드

1 #INCLUDE <iostream>
 2 #INCLUDE <알고리즘>
 3 #INCLUDE <유틸리티>
 4 #INCLUDE <cstdio>
 5 #INCLUDE <cstdlib>
 6 #INCLUDE <ctime이>
 7 #INCLUDE <cmath>
 8 #INCLUDE <CString을>
 9 # <포함 문자열 >
 10 #INCLUDE <벡터>
 11 #INCLUDE <적층>
 12 #INCLUDE <큐>
 13 #INCLUDE <지도>
 14 #INCLUDE은 < 설정 >
 15  
16을  사용하여  공간의 성병;
17 타입 정의 부호없는  ULL;
18 의 typedef  LL;
19 타입 정의  더블 LB;
20  CONST  INT INF_INT = 0x3f3f3f3f ;
21  CONST LL INF_LL = 0x3f3f3f3f3f3f3f3f ;
22  
23 LL의 N = 3 ;
24  INT A [ 3 ], m [ 3 ] = { 23 , 28 , 33 };
25  
26 LL의 exgcd (LL A, B를 LL, LL 및 X, LL 및 Y)
 27  {
 28      하다면(! b)
 29      {
 30          , X = 1 , Y는 = 0 ;
31          돌아 a 및
32      }
 33      LL exgcd g = (B, A %의 B, Y, X); 
34      Y- = A / B * X; 
35      리턴 g;
36  }
 37  
38 (LL 해결 INT의 d)
 39  {
 40      LL M = 1 , ANS를 = 0 , X, Y;
(41)      에 대한이 ( int로 I = 0 ; I <N은, 내가 ++) M = m * [I], A [i]는 (%) = m [I];
(42)      에 대한( int로 = 1을 0 ; i가 N <; 내가 ++ )
 43      {
 44          LL t = M / m [I];
45          exgcd (t, m [i]는, X, Y);
46          ANS + = A [i]는 *의 * t의 X;
47      }
 48      ans- = D;
49      의 ANS = ((ANS %의 M) + M) %의 M;
50      의 경우 ANS + = (ANS!) M;
51      리턴 ANS;
52  }
 53  
54  INT 주 ()
 55  {
 56  //     freopen을 ( "std.in", "R", 표준 입력);
57  //    freopen을 ( "std.out", "w", 표준 출력); 
58      INT의 D, CNT = 1 ;
(59)      동안 (~는 scanf ( " % D % D % D % D ' , A [ 0 ], A [ 1 ], A [ 2 ], d) && (a [ 0 ] =! - 1 || A [ 1 ] ! = - 1 || A [ 2 ! = - 1 ! || D = - 1 ))
 (60)          의 printf ( " . 케이스 % D : 다음 삼중 피크 %의 LLD 일 발생 \ n " , CNT ++ 해결 (d ));
61      반환  0 ;
62 }

 

추천

출처www.cnblogs.com/VBEL/p/11437877.html