아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

배열과 gcd

시간 제한0.5초메모리 제한128 MB

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

보통10점 중 7점

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

문제

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

C[0]=arr[0],C[i]=gcd⁡(C[i−1], arr[i])(1≤i≤N−1)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)는 xx와 yy의 최대공약수다.

예를 들어 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(1≤N≤1051 \le N \le 10^5)과 numnum(1≤num≤1091 \le num \le 10^9)이 공백으로 구분되어 주어진다.

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

출력

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

예제4

  1. 예제 1

    입력
    3 900
    900 450 225
    
    예상 출력
    2
    
  2. 예제 2

    입력
    5 16
    16 16 8 8 2
    
    예상 출력
    8
    
  3. 예제 3

    입력
    4 10
    6 4 2 2
    
    예상 출력
    0
    
  4. 예제 4

    입력
    1 1000000000
    7
    
    예상 출력
    1