시간 제한 : C / C ++ 이초 4 개 초 언어를 다른
공간의 제한 : C / C ++ 262144K, 다른 언어 524288K의
64 비트 IO 형식 : LLD의 %
공간의 제한 : C / C ++ 262144K, 다른 언어 524288K의
64 비트 IO 형식 : LLD의 %
제목 설명
네 개의 양의 정수 X0, X1, A, B에 주어진
X 0 , X 1 , , B
. 그리고 당신이 알고있는
모든 i≥2을 위해.
그리고 MOD N 개의 양의 정수를 감안할 때, xnx_n의 계산하시기 바랍니다 X n 개의 모듈로 MOD를.
문제는 단순한 보입니까? 놀람! n 값은 많은 자리수를 가질 수있다!
그리고 MOD N 개의 양의 정수를 감안할 때, xnx_n의 계산하시기 바랍니다 X n 개의 모듈로 MOD를.
문제는 단순한 보입니까? 놀람! n 값은 많은 자리수를 가질 수있다!
설명을 입력합니다 :
입력은 두 개의 라인을 포함한다.
첫 번째 라인은 네 개의 정수 X0, X1, A, B를 포함 (1≤x0, X1, A, b≤10 ^ 9).
둘째 줄은 MOD N 개의 정수를 포함 (^ 6 1≤n <10 (10) 10 ^ 9 <MOD≤2 ^는 9 × 10, N에는 앞에 0이 없다).
출력 설명 :
답을 나타내는 하나 개의 정수를 인쇄합니다.
기입
1 1 1 1 10 1,000,000,001
수출
89
설명
얻어진 시퀀스 X는 피보나치 시퀀스이다. 11 번째의 상품 (89)이다.
기입
1,315 521 20,185 5,452,831 1,000,000,007 9999999999999999999999999999999999999
수출
914730061
: 문제점의 의미 알려진 X0, X1, A, B, N, 개조, 및 수식 , 요구
모듈로 개조 대.
해결 방법 : 진수 빠른 전원.
코드 :
#INCLUDE <비트 / stdc ++ H.> 사용 스페이스 성병; 긴 긴 X0, X1, A, B, 개조; 구조체 노드 { 긴 긴 Martix [ 2 ] [ 2 ]; 노드 운영자 * ( CONST 노드 N) CONST { 노드 합; int로 I, J, K; 대 (I = 0 ; I는 < 2 ; i가 ++ ) 에 대한 (j = 0 ; j를 < 2 , J ++ ) { sum.Martix [I] [J] = 0 ; 대 (K = 0 ; K < 2 k 번째 ++ ) sum.Martix [I] [J] = (sum.Martix [I] [J] + Martix [I] [K] * n.Martix [K] [J] ) %의 모드; } 리턴 합; } }; 노드 ANS, t; 숯 N [ 1000005 ]; 빠른 노드 (노드 A, INT의 K); INT 의 main () { int로 난, K, L; scanf와 ( " % LLD % LLD % LLD % LLD " , X0, X1, A, 및 B); scanf와 ( " % S %의 LLD " , N, 개조); ans.Martix [ 0 ] [ 0= ans.Martix는 [ 1 ] [ 1 ] = 1 ; ans.Martix [ 1 ] [ 0 ] = ans.Martix는 [ 0 ] [ 1 ] = 0 ; t.Martix는 [ 0 ] [ 0 t.Martix은 [] A가 = 0 ] [ 1 ] = B; t.Martix는 [ 1 ] [ 0 ] = 1 ; t.Martix [ 1 ] [ 1 ] = 0 ; 패 = 용 의 strlen (N); 대 (I = 1- (1) , I> = 0 ; 난 ... ) { ANSANS = * 빠른 (t, N [I] - ' 0 ' ); t = 빠른 (t, 10 ); } 의 printf ( " %의 LLD " (X1에서의 ans.Martix * [ 1 ] [ 0 ] + X0 * ans.Martix [ 1 ] [ 1 ]) %의 개조)를; 시스템 ( " 정지 " ); 반환 0 ; }
노드 빠른 (노드 A, INT의 K) { 노드 합; sum.Martix [ 0 ] [ 0 ] = sum.Martix는 [ 1 ] [ 1 ] = 1 ; sum.Martix [ 0 ] [ 1 ] = sum.Martix [ 1 ] [ 0 ] = 0 ; 하면서 (K) { 경우 (K & 1 ) 합계 = 합계 * a 및 K >> = 1 ; = A * a 및 } 리턴 합; }