C♯の勉強

C♯4.0 で TopCoder の過去問を解きます。

TopCoder SRM575: TheNumberGameDivOne

x が小さい場合について、TheNumberGameDivTwo の方法で調べると
x が偶数かつ x が \( 2^{2*k+1} \) ではない場合だけ先手必勝となることが分かる。

public class TheNumberGameDivOne {
    public string find(long n) {
        return Solve(n) ? "John" : "Brus";
    }

    public bool Solve(long x) {
        if (x % 2 == 0) {
            int pow = 0;
            while (x % 2 == 0) {
                x /= 2;
                pow++;
            }
            if (x == 1 && pow % 2 == 1) return false;
            return true;
        } else {
            return false;
        }
    }
}