ここでは、数値nが与えられたとしましょう。 [L、R]の範囲にある値の数S ^(S + n)を見つける必要があります。 (Sは負でない整数、^はビット単位のxor演算子です)。アルゴリズム:範囲内の数値の制約付きXOR
、nが2のべき乗であれば、私は簡単にこれを行うことができます(彼らは非常に便利なパターンを持っている)
私は任意の一般的なn個のためにこれを解決する方法がわからないです。 提案がありますか?
EDIT:
Nも負でない整数です。 n、L、Rはすべて10^18未満です。
これはいくつかの練習テストで私がいつか戻してくれたプログラミング問題でした。私は今、これをStackOverflowで似たような質問を見たことを思い出しました。
EDIT 2: 例で説明するが、 は、n = 1 はその後、我々はSは^(S + 1)は、常にすべてのもののバイナリ表現を持っていることを知っていると言います。例:1,3,7、...
これを解決するには、Range [L、R]内のそのような数値の数を数えなければなりません。
n = 2の累乗であれば、同様の方法が動作します。しかし、nが2のべき乗でない場合、何をするべきか分かりません。
例を挙げることができます – AnotherGeek
「n」も非負整数ですか? –
L、R、nに関する追加の制約はありますか?あなたの質問のコンテキストは何ですか? –