만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

점화식과 쿼리

시간 제한3초메모리 제한1024 MB

요약
x_n = a·x_(n-1) + b·x_(n-2) + n^k 점화식과 초깃값 x_0, x_1이 주어질 때, n이 최대 10^18인 질의 50,000개마다 x_n을 100003으로 나눈 나머지를 구합니다.
난이도

어려움10점 중 8점

유형
수학, 행렬, 재귀
정답자
아직 제출이 없습니다

문제

수열 {xn}\{x_n\}은 모든 정수 n≥2n \ge 2에 대해 점화식 xn=axn−1+bxn−2+nkx_n = ax_{n-1} + bx_{n-2} + n^k를 만족한다. 첫 두 항 x0x_0, x1x_1과 점화식이 주어질 때 xnx_n을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 정수 x0,x1,a,b,kx_0, x_1, a, b, k가 공백으로 구분되어 주어진다. (0≤x0,x1,a,b,k≤100 000)(0 \le x_0, x_1, a, b, k \le 100\,000)

둘째 줄에 정수 QQ가 주어진다. (1≤Q≤50 000)(1 \le Q \le 50\,000)

셋째 줄부터 QQ개의 줄에 정수 nn이 한 줄에 하나씩 주어진다. (0≤n≤1018)(0 \le n \le 10^{18})

출력

각 쿼리마다 xnx_n을 소수 100 003100\,003으로 나눈 나머지를 한 줄에 하나씩 출력한다.

힌트

C/C++, Java 등의 언어에서 일부 변수를 32비트 정수형으로 선언하면 오버플로우가 발생할 수 있다.

예제2

  1. 예제 1

    입력
    1 1 1 1 2
    7
    1
    2
    3
    4
    5
    6
    7
    
    예상 출력
    1
    6
    16
    38
    79
    153
    281
    
  2. 예제 2

    입력
    1 2 4 99999 300
    1
    10000007
    
    예상 출력
    77817