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

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

소수의 합

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

요약
각 n에 대해 순서를 무시하고 소수를 중복 사용해 n을 합으로 나타내는 경우의 수를 구해 1,000,000,007로 나눈 나머지를 출력한다.
난이도

보통10점 중 6점

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

문제

소수 (Prime Number)란 11이 아니면서, 11과 자기 자신 이외에 약수가 존재하지 않는 양의 정수를 의미합니다. 예를 들어, 22, 33, 55, 77 등이 소수에 해당합니다. 함수 f(n)f(n)을 "nn을 00개 이상의 소수의 합으로 표현하는 경우의 수"로 정의합시다. 이 때, 소수의 종류는 중복해서 사용할 수 있으며, 종류가 같고 순서만 다른 경우는 같은 경우로 봅니다. 예를 들어, 55는 2+32+3 또는 55로 나타낼 수 있으며, 다른 방법은 존재하지 않습니다. 따라서 f(5)f(5)는 22입니다.

정수 nn이 주어질 때, f(n)f(n)의 값을 구하여 출력하세요. 단, 정답이 커질 수 있으니 정답을 1,000,000,0071 \\, 000 \\, 000 \\, 007로 나눈 나머지를 출력하세요.

입력

첫 번째 줄에 테스트 케이스의 개수 TT (1≤T≤10,0001 \le T \le 10\\,000)가 주어집니다.

두 번째 줄부터 T+1T+1 번째 줄까지 i+1i+1 번째 줄에 각각 정수 n_in\_i (0<n_i≤100,0000 < n\_i \le 100\\,000)가 주어집니다.

출력

각 테스트 케이스에 대해 정답을 각각 한 줄에 출력하세요. 단, 정답이 커질 수 있으니 정답을 1,000,000,0071\\,000\\,000\\,007로 나눈 나머지를 출력하세요.

예제1

  1. 예제 1

    입력
    6
    1
    2
    5
    7
    10
    20000
    
    예상 출력
    0
    1
    2
    3
    5
    384444614