ホームページ >バックエンド開発 >C++ >数字は2のパワーですか? これを効率的に決定するにはどうすればよいですか?

数字は2のパワーですか? これを効率的に決定するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-29 19:26:12761ブラウズ

Is a Number a Power of 2?  How Can We Efficiently Determine This?

数字の数が2であるかどうかは2のパワーです

質問声明

コンピューターサイエンスでは、一般的な問題は、指定された数値が2のパワーであるかどうかを判断することです。この問題は、特に応用およびアルゴリズム分析にあります。このアルゴリズムには、次の特性が必要です

コードはシンプルで明確です。

    署名のない長い整数値を正確に処理できます。
  1. メソッド
  2. メソッド1:シフトの力の方法

この問題を解決する方法は、2つの連続電力を繰り返し、入力番号と一致する電源があるかどうかを確認することです。これは、次のように実装できます

メソッド2:計算アルゴリズムの数

別の方法には、ペア数の使用の計算が含まれます。ただし、これには慎重に注意が必要です。これは、浮動的な点計算が精度を引き起こす可能性があるためです。次のコードを検討してください:

最適なソリューション:ビットコンピューティング方法
<code class="language-c#">private bool IsPowerOfTwo(ulong number)
{
    if (number == 0)
        return false;

    for (ulong power = 1; power > 0; power <<= 1)
    {
        if (power == number)
            return true;
        if (power > number)
            return false;
    }
    return false;
}</code>
より効果的なソリューションは、ビット操作の使用です。 2のパワーには一意の特性があります。(x -1)が実行され、操作(&)が実行されると、結果値は常に0です。この属性は、次のように表すことができます:

ゼロの力の候補者を排除するために、それはわずかに変更できます:

説明

位置と操作(&)によって、xおよび(x -1)のバイナリ表現の各ビットの位置を確認します。両方の場合、結果は1です。したがって、2の電力は0であり、(x -1)位置と0の計算結果があります。
<code class="language-c#">private bool IsPowerOfTwo_2(ulong number)
{
    double log = Math.Log(number, 2);
    double pow = Math.Pow(2, Math.Round(log));
    return pow == number;
}</code>

この方法は、数値が2であるかどうかを判断するための効率的かつ直接的なソリューションを提供します。

以上が数字は2のパワーですか? これを効率的に決定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。