C ++#のパワーを実現するクイック

高速電力テンプレートのタイトル

明らかに、この問題はありません単にでき、\(\用)ループ+ \(MOD \)は、完了するために、インデックスので\(のp \)は、完了するまでに、そして確かにタイムアウトを直接サイクルを長整数に達しています。
だから、高速電力がされて入ってきた。
それは速い何電源ですか?
使用してバイナリしばしばに似伴う計算の数を減らすために、本当の拡大を(A ^ B \モッズのp \ \) の操作、\(B \)しばしば非常に大きく、我々はにつながることができません(\用)\ループ計算。
それでは、どのようにそれを達成するために、コードを使用するには?
まず第一に、保険のために我々は、すべてのデータ型が設定されている置きますlong long
次いで、高速電力関数を書く、パラメータは上記説明の便宜上であり、\(A、B、Pは\) これは良い習慣です
高速電力名は、迅速なカウント数を示唆して何倍の数の力。O(logN個)の時間計算は、単純なOの効率と比較して(N)が大幅に改善されています。
簡単に言えば、それはバイナリモジュロプロセスです。
プロセスの半分として、より多くの何も時間の影響の複雑さを軽減するために、ベースの減少率を拡大していません。
しかし、高速な剰余演算の一般的なパワーがあるので、それはプロセスの中で行われる、ということに注意してください\(MOD \)ああ。
コードは以下の貼り付け機能をカスタマイズする方法で、また非常に簡単です...

long long qpow(long long a,long long b,long long p)
{
    long long x=a;
    long long ans=1;
    while(b)
    {
        if(b%2!=0)
            ans*=x;
        ans%=p;
        x*=x;
        x%=p;
        b/=2;
    }
    return ans;
}

OV。

おすすめ

転載: www.cnblogs.com/moyujiang/p/11240084.html