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"); }