はまやんはまやんはまやん

hamayanhamayan's blog

Sum of "not power of 2" [yukicoder No.638]

https://yukicoder.me/problems/no/638

解法

https://yukicoder.me/submissions/232172

「check(x) := xが2の整数乗であるか」を作っておこう。
可能な場合はaは10以下くらいになる。
完全になんとなくなのだが、Nが大きい場合はb=N-aのbも大きくなり、隣接する2の整数乗は大分離れているのが原因。
この辺を全探索して答える。

ll N;
//---------------------------------------------------------------------------------------------------
int check(ll x) {
    while (x != 1) {
        if (x % 2 == 1) return 0;
        x /= 2;
    }
    return 1;
}
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N;

    rep(ans, 3, min(N, 10LL)) if (!check(ans) and !check(N - ans)) {
        printf("%d %lld\n", ans, N - ans);
        return;
    }
    printf("-1\n");
}