엄청난 수열
시간 제한2초메모리 제한128 MB
첫 n-1개 항의 공집합이 아닌 모든 부분집합 합을 더해 수열을 정의하고, 여러 시작값에 대해 최대공약수, 최소공배수의 2의 지수, 구간 합, 특정 항을 구한다.
문제
피보나치 수는 빠르게 커진다. 택희는 100만 번째 피보나치 수까지 종이에 적어 보고도 성에 차지 않아, 훨씬 빠르게 커지는 수열을 직접 정의했다.
첫 항은 이고, 이라 할 때 다음 항은 아래 식으로 정해진다.
즉 은 부터 까지 중에서 하나 이상을 고르는 모든 방법마다 고른 수의 합을 구한 다음, 그 값을 전부 더한 것이다.
인 수열의 앞부분 몇 항은 이렇다.
택희는 이 수열을 놓고 질문 개를 준비했다. 질문마다 첫 항 을 따로 주므로 질문마다 다른 수열을 다룬다. 모든 질문에 답하는 프로그램을 작성하자.
입력
첫 줄에 질문의 개수 가 주어진다. ()
이어지는 개의 줄에 다음 네 가지 중 한 형태의 질문이 주어진다.
1 a1 i j(, ): 첫 항이 인 수열에서 와 의 최대공약수는 얼마인가?2 a1 i j(, ): 첫 항이 인 수열에서 와 의 최소공배수를 이라 하자. 이 값은 너무 크므로, 이 정수가 되게 하는 가장 큰 정수 를 묻는다.3 a1 i j(, ): 첫 항이 인 수열에서 는 얼마인가? 이 형태의 질문은 항상 를 만족하도록 주어진다.4 a1 k(, ): 첫 항이 인 수열에서 는 얼마인가?
출력
개의 줄에 걸쳐 각 질문의 답을 1,000,000,007로 나눈 나머지를 입력에 주어진 순서대로 출력한다.