電力高速高速べき乗剰余

1.高速電力

高速電力塩基数が得られ、迅速な結果を達成するためのサイクルの数を減らすためにビット演算を使用して、Bの高速計算能力を指します。

ビット単位の演算子:バイナリ算術ルール:1&1 = 1、0 = 0 1。

コードの実装

int Pow(int a,int b){
    int ans = 1;
    int base = a;
    while(b)
    {
        if(b & 1)
        {
         ans *= base;
        }
        base *= base;
        b >>= 1;
    }
    return ans;
}

注:
ステートメントがBを指し&1つのbは、バイナリに変換され、最後のビットが1で表示された場合、0ヒット、疲れ乗って、1本のヒットは、値が答えに疲れ掛け掛けます。
ループBは>> 1、シフト動作、Bの右に移動しながら=ステートメント、最後の原稿をBに加えて元の値にも(前者と等価で得られた場合、次を満たします2)。

2.電源を高速撮る
モジュロへの電力のために、焦点は、私たちが直接剰余演算を使用している場合は非常に遅く、実際には、モジュロでパワーを求める過程です。電力需要が速いので、結果を得るときだから我々は、同様にいくつかのコンテンツを追加することができます。

(^ B)MOD C =(MOD C)^ B MOD C:これは定理であるべきです。

コアコード:

int pow_mod(int a,int b,int c)
{
    int ans = 1;
    int base = a%c;
    while(b)
    {
        if(b & 1) ans = (ans*base)%c;
        base = (base*base)%c;
        b >>= 1;
    }
    return ans;
}

定理内部は、モジュロ演算の塩基数を有することです。ここでは、モジュロ上のベースへの割り当ての時にあります。そして、各モジュロバックのために、我々は実際に電源を法を達成するように、分配率を使用します。

リリース元の4件の記事 ウォンの賞賛0 ビュー94

おすすめ

転載: blog.csdn.net/m0_45861545/article/details/104032215