【解決方法】所定のコマンドを使用してビットを連続して反転させ、それらがすべて false になるようにするにはどうすればよいですか

プログラミングQA


私はビットの行を持っています:

001111000000000

そして、これらをすべて反転させて偽にしたいのですが、これを行うためのコマンドの数は決まっています。これらのコマンドは次のようになります。

3, 5, 7, 11, 13, 17, 19 ... (prime numbers, excluding 2)

各コマンドは、NOT 演算子を使用して対応する量のビットを反転します (0 は 1 になり、1 は 0 になります)。 私の目標は、これを達成するために最小限のコマンドを使用することです。

ビット行の最後の 1 の「後」には、タスクを完了するのに十分なスペースが常にあることに注意してください。

私が試したこと:

最初の 1 から始まる単純な min-max アルゴリズムを使用してみました。いくつかの条件を使用して、使用する最適なコマンドを決定します。 これは単純なシナリオでのみ機能し、次のようなより複雑なシナリオでは機能しません。

001101100100001000000000000000000

解決策 1

2 進数: 00111100000 = 10 進数: 480

480 のすべての約数を見つけます。つまり、480 を割っても余りを残さない数を求めます。 例: 480/10 = 48; したがって、10 は 480 の因数であり、48 も 480 の因数です。

したがって、480 の因数は 1、2、3、4、5、6、8、10、12、15、16、20、24、30、32、40、48、60、80、96、120、160 です。 、240、480。

素因数: 2、3、5 – つまり: 25 ×31 ×51 = 480。

これは、これをコーディングする正しい方向に向けるのに十分なはずです。

コメント

タイトルとURLをコピーしました