Floyd のサイクル検出アルゴリズムは、わずかに異なる問題、つまりサイクルがあるグラフで使用されると考えられていますが、グラフ全体がサイクルである必要はありません。
例として、次の 2 つのグラフを比較します。
1 -> 2 -> 3 -> 4 -> 1 -> ...
と
1 -> 2 -> 3 -> 4 -> 2 -> ...
どちらにもサイクルがありますが、2 番目のものはノードの一部にしかサイクルがありません (つまり、1 はサイクルに表示されません)。
例 2 のようなサイクルには関心がなく、「完全なサイクル」のみに関心があります。
さらに、ビットを操作する場合、アルゴリズムは整数を操作する場合とは少し異なります (たとえば)。その理由は、1 回の比較だけで一度に多くのビットを比較できるからです (ビットの総数が 1 つの整数以下である限り)。
問題を解決する方法として考えられるのは次のとおりです。
1 のサイクルがあるかどうかを確認するには、整数を 1 つシフトし、それ自体と比較します。
000000000000
000000000000
-yyyyyyyyyyy-
=> Matches!
110110110110
>110110110110
-ynnynnynnyn-
=> Nope
000000000000
のサイクルは 1 ですが、そうで110110110110
はないので、2 でテストを続けます。
110110110110
>>110110110110
--nynnynnynn--
=> Nope
3 に進みます。
110110110110
>>>110110110110
---yyyyyyyyy---
=> Matches!
もちろん、今説明したことをビット演算で実装する必要があります。それはあなたに任せます。