페이지

2057번: 팩토리얼 분해

https://www.acmicpc.net/problem/2057


$O(1)$

0! + 1! + ... + (n-1)! <= n!
19! 부터 0! 까지 뺄 수 있는데로 빼보고 가능한지 본다.
참고로 n이 0이면 불가능하다.


#include<cstdio>
long long n, t = 2432902008176640000LL;
int main() {
    scanf("%lld", &n);
    if (!n) n = -1;
    for (int i = 20; i; i--) {
        t /= i;
        if (n >= t) n -= t;
    }
    puts(n ? "NO" : "YES");
    return 0;
}

댓글 없음 :

댓글 쓰기