2

a、b、c が 3 つの整数であるとしましょう。次に、それらを XOR して、d = a ^ b ^ c を取得します。

「a」と「d」しか知らず、a、b、cの間に関係がない場合。「a」が「d」の生成に使用されたかどうかを確認する方法はありますか?

例えば:

d = a ^ b ^ c;

func(a, d); //returns true

func(b, d); //returns true

func(f, d); //returns false, for f!=a, f!=b, f!=c

つまり、「d」は「a^b^c」の結果であり、事前にはわかりません。「d」と数値「x」が与えられた場合、x が a または b または c のいずれかであるかどうかを確認できますか?

申し訳ありませんが、ここで a、b、c、d はブール変数ではないことを忘れてしまいました。どのプログラミング言語でも整数を表すために使用します。したがって、d = a^b^c はビット演算です。たとえば、d は 2^18^19 の結果に等しくなります。

4

2 に答える 2

1

いいえ、任意の a と d について、たとえば b = 0 と c = a ^ d を設定することによって、式を真にすることができるためです。

たとえば、d = 2^18^19 の例を見てみましょう。12 は 2 または 18 または 19 と等しくないため、func(12, d) を「false」にする必要があります。問題は、d がちょうど 3 であることです。2 と 8 と 19 から作成されたことを「覚えていません」。したがって、d = 2^18^19 = 3 = 12^0^15 = 7^12^8 = 4^11^12 = …、そして d = 3 だけを考えると、12 または 0 または 15 または7 または 8 または 4 または 11 は、2 または 18 または 19 とは異なるものとして。

于 2016-12-17T17:48:33.413 に答える
0

いいえ、できません: 任意の数 (a と d) については、別の数 (b) をいつでも見つけることができます。この数は、その対のいずれかの数値と XOR をとって、もう一方の数値になります。

d = a ^ b or a = d ^ b

さらに、複数のXORでそれをやろうとしています...

実際、XOR は暗号化の原始的な方法として使用されます。パターンを検索する XOR によって作成された多数の数値 d がある場合は、それを試して推測することができます。

于 2016-12-17T17:48:36.897 に答える