만드는 중입니다

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

doju

시간 제한2초메모리 제한512 MB

요약
증가하는 서로 다른 정수 수열 중 a_n/g와 a_n-n 두 잘못된 식이 모두 올바른 답과 다른 홀짝을 내는 데이터 파일의 수를 q로 나눈 나머지를 구한다.
난이도

어려움10점 중 8점

유형
수학, 정수론, 조합론, 동적 계획법
정답자
아직 제출이 없습니다

문제

doju는 온라인 저지 문제에 새 데이터를 추가하는 일을 즐긴다. 자기가 추가한 데이터 때문에 틀리는 사람을 보면 아주 기뻐한다.

오늘 doju가 데이터를 만들 문제의 입력 형식은 다음과 같다.

첫째 줄에 정수 nn (1≤n≤maxn1 \le n \le \mathit{maxn})이 주어진다. 둘째 줄에 서로 다른 정수 a1,a2,…,ana_1, a_2, \dots, a_n (1≤ai≤maxa1 \le a_i \le \mathit{maxa})이 오름차순으로 주어진다.

이 문제의 올바른 풀이는 먼저 a1,a2,…,ana_1, a_2, \dots, a_n의 최대공약수 gg를 구하고, x=an/g−nx = a_n / g - n을 구한다. 그 다음 xx가 홀수면 odd를, 짝수면 even을 출력한다.

그런데 xx를 아래 두 가지 방법으로 잘못 구해도 이 문제를 간혹 맞을 수 있다.

  1. x=an/gx = a_n / g
  2. x=an−nx = a_n - n

두 방법 모두 잘못 구한 xx의 홀짝을 그대로 출력한다. 세어야 하는 것은 두 방법이 모두 올바른 답과 다른 답을 출력하게 만드는 데이터의 개수다. nn이 다르거나 수열이 다르면 서로 다른 데이터로 센다.

maxn\mathit{maxn}, maxa\mathit{maxa}, qq가 주어졌을 때, 잘못 구한 두 방법을 모두 틀리게 만드는 데이터의 개수를 qq로 나눈 나머지를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 maxn\mathit{maxn}, maxa\mathit{maxa}, qq가 공백으로 구분되어 주어진다. (1≤maxn≤300001 \le \mathit{maxn} \le 30000, maxn≤maxa≤109\mathit{maxn} \le \mathit{maxa} \le 10^9, 104≤q≤105+12910^4 \le q \le 10^5 + 129)

출력

첫째 줄에 잘못 구한 두 방법을 모두 틀리게 만드는 데이터의 개수를 qq로 나눈 나머지를 출력한다.

힌트

maxn=3\mathit{maxn} = 3, maxa=6\mathit{maxa} = 6인 경우 조건을 만족하는 데이터는 네 가지다. n=1n = 1이고 수열이 22인 데이터, n=1n = 1이고 수열이 44인 데이터, n=1n = 1이고 수열이 66인 데이터, n=3n = 3이고 수열이 2,4,62, 4, 6인 데이터다.

예제3

  1. 예제 1

    입력
    3 6 100000
    
    예상 출력
    4
    
  2. 예제 2

    입력
    6 21 100129
    
    예상 출력
    154
    
  3. 예제 3

    입력
    58 787788 50216
    
    예상 출력
    46009