피보나치 더하기

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

요약
피보나치 수를 중복 사용해도 되며 정확히 k개를 더해 x를 만들 수 있는지 판별한다.
난이도

보통10점 중 4점

유형
수학, 그리디, 정수론, 완전 탐색
정답자
아직 제출이 없습니다

문제

두 양의 정수 kk, xx가 주어질 때, 피보나치 수열의 항들 중 정확히 kk개를 더하여 xx를 만들 수 있는지 판별하여라. 이때 피보나치 수열의 항을 중복하여 선택할 수 있다.

피보나치 수열이란, F_1=F_2=1,F_n=F_n−1+F_n−2,(n≥3)F\_1 = F\_2 =1, F\_n = F\_{n-1} + F\_{n-2}, (n \geq3)로 정의되는 수열이다.

입력

첫 번째 줄에 테스트케이스의 수 TT가 주어진다. (1≤T≤100)(1 \leq T \leq 100)

다음 TT개의 줄에 사용할 피보나치 수열의 항의 개수 kk과 만들고자 하는 양의 정수 xx가 공백으로 구분되어 주어진다. (1≤k≤3;,1≤x≤1016)(1 \leq k \leq 3;\\, 1 \leq x \leq 10^{16})

출력

TT개 줄에 걸쳐 문제에 대한 해답을 출력한다.

ii번째 줄에는 ii번째 테스트케이스의 정답을 출력한다. kk개의 피보나치 수열의 항들을 더하여 xx를 만들 수 있다면 YES, 만들 수 없다면 NO를 출력한다.

힌트

문제의 입력이 int 자료형을 초과할 수 있다. 대신 long long 자료형 등을 사용하는 것을 권장한다.

출력 시 대소문자에 유의한다. Yes, yes 등은 정답으로 인정되지 않는다.

예제1

  1. 예제 1

    입력
    6
    1 3
    1 6
    2 6
    2 12
    3 12
    3 824
    
    예상 출력
    YES
    NO
    YES
    NO
    YES
    NO