만드는 중입니다

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

거대한 문자열

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

요약
n과 k가 주어졌을 때, 무한 문자열 S의 길이 n인 접두사에 나타나는 서로 다른 비어 있지 않은 부분 문자열의 개수를 구합니다.
난이도

어려움10점 중 9점

유형
문자열, 수학, 조합론
정답자
아직 제출이 없습니다

문제

크기가 kk인 알파벳 Σ={s0,…,sk−1}\Sigma = \{s_0, \ldots, s_{k-1}\}을 생각하자. 다음과 같이 문자열의 수열 {Ti}\{T_i\}를 정의한다.

  • T0=s0T_0 = s_0
  • 모든 정수 i≥1i \ge 1에 대해 Ti=Ti−1 si mod kT_i = T_{i-1}\, s_{i \bmod k}

무한 문자열 S=T0T1T2…S = T_0T_1T_2\ldots는 모든 TiT_i를 인덱스 오름차순으로 이어 붙인 문자열이다. 예를 들어 k=3k = 3이고 s0s_0은 a, s1s_1은 b, s2s_2는 c이면 T0T_0은 a, T1T_1은 ab, T2T_2는 abc, T3T_3은 abca, T7T_7은 abcabcab이다. 이때 SS는 aababcabcaabcab...이다.

SS의 길이 nn인 접두사를 SnS_n으로 표기한다. nn과 kk가 주어질 때, ∣Σ∣=k|\Sigma| = k이고 SnS_n의 서로 다른 비어 있지 않은 부분 문자열의 개수를 구하라.

입력

첫 줄에 테스트 케이스의 개수 TT (1≤T≤1051 \le T \le 10^5)가 주어진다. 이어지는 TT개의 줄에는 각각 공백으로 구분된 두 정수 nin_i와 kik_i (1≤ni≤1091 \le n_i \le 10^9, 1≤ki≤1091 \le k_i \le 10^9)가 주어진다.

출력

TT개의 줄을 출력한다. ii번째 줄에는 알파벳 크기가 kik_i일 때 SniS_{n_i}의 서로 다른 비어 있지 않은 부분 문자열의 개수를 쓴다.

예제1

  1. 예제 1

    입력
    7
    1 3
    2 3
    3 3
    4 3
    5 3
    6 3
    7 3
    
    예상 출력
    1
    2
    5
    8
    11
    17
    23