0

これがトリックを行うコードです。O(logn)時間でm ^ nを計算する方法の概念を知っています。それは関連していると思いますが、どうすればよいでしょうか。

for(long long int i = 2; N; N /= 2, i *= i){
    if(N & 1){
        ans *= i;
    }
}
4

2 に答える 2

10

これが二乗と乗算のアルゴリズムです。

N / = 2には、最下位ビットを削除する効果があります(残りのすべてのビットがゼロになると、アルゴリズムは終了します)。

N&1は、最下位ビットが奇数か偶数かをチェックします

于 2013-01-19T17:14:28.610 に答える
1

これは基本的に、log N time mpowernアルゴリズムが機能するのと同じように機能します。次の2セットの入力のコードをトレースするだけです。

PS:ansは1に設定する必要があります。

  1. n = 2
  2. n = 3

きっとあなたはそれを手に入れるでしょう。

于 2013-01-19T17:17:18.403 に答える