2016-04-10 3 views
0

AとBの間にあるすべての自然数のANDを計算する必要があります。私はこの問題をウェブサイトで発見しました。彼らは使用しましたが、私は方法を理解できませんでした。AとBの間にあるすべての自然数のAND

この問題を解決するには、各電力2の発生に焦点を当てる必要があります。これは周期的であることがわかります。今度は各2^iについて(サイクルの長さは2^iの0と1の同じ数を持つ2 ^(i + 1)になります)、与えられた間隔で1が一定であれば計算するだけです簡単な算術によって。そうであれば、その2の威力が答えに現れるでしょう、そうでなければそれはしません。

+0

Stack Overflowをご利用いただきありがとうございます。このタイプの質問は、プログラミングのヘルプサイトでは少し広範です。プログラミングの助けが必要な場合には、少し具体的に質問をしてください。このようなアルゴリズムの質問には反応がありますが、Stack Overflowの本来の目的ではありません。 – Brody

答えて

2

最初のいくつかの数字を視覚化するために3ビットで(符号なし)のカウントしてみましょう:

000 = 0 
001 = 1 
010 = 2 
011 = 3 
100 = 4 
101 = 5 
110 = 6 
111 = 7 

あなたが列を見れば、あなたは最下位ビットが1のサイクルと次のと交互にされていることがわかります2、次に4のサイクル、およびn番目の最下位ビットは2 ^(n-1)のサイクルと交互に繰り返される。

ビットが0になるとすぐに、常に0になります(0であれば何でも0なので)。

またABn番目のビットが1d < 2^(n-1)ある場合n番目のビットのみ1であると言えるでしょう。 つまり、最初と最後に1で、そのサイクルが大きすぎるために中間に0に変更する時間がない場合、ビットは1になります。

関連する問題