배열과 gcd

각 원소가 1 이상 num 이하인 배열 arr의 누적 최대공약수 배열이 주어진 C와 같아지는 경우의 수를 1e9+7로 나눈 나머지를 구한다.

보통7정수론동적 계획법수학조합론아직 제출이 없습니다시간 제한0.5초메모리 제한128 MB

문제

정수로 이루어진 크기 NN인 배열 arrarr와 배열 CC가 있다. 두 배열은 다음 관계를 만족한다.

C[0]=arr[0],C[i]=gcd(C[i1],arr[i])(1iN1)C[0] = arr[0], \qquad C[i] = \gcd(C[i-1],\, arr[i]) \quad (1 \le i \le N-1)

gcd(x,y)\gcd(x, y)xxyy의 최대공약수다.

예를 들어 arr=[16,16,8,16,2]arr = [16, 16, 8, 16, 2]이면 C=[16,16,8,8,2]C = [16, 16, 8, 8, 2]가 된다.

배열 CC가 주어질 때, 그 CC를 만드는 배열 arrarr의 가짓수를 10000000071000000007(109+710^9+7)로 나눈 나머지를 구한다. arrarr의 각 원소는 11 이상 numnum 이하의 정수다.

입력

첫째 줄에 정수 NN(1N1051 \le N \le 10^5)과 numnum(1num1091 \le num \le 10^9)이 공백으로 구분되어 주어진다.

둘째 줄에 배열 CC의 원소 C[0],C[1],,C[N1]C[0], C[1], \ldots, C[N-1]이 공백으로 구분되어 주어진다. (1C[i]num1 \le C[i] \le num)

출력

조건을 만족하는 배열 arrarr의 가짓수를 109+710^9+7로 나눈 나머지를 첫째 줄에 출력한다.