• <tfoot id='WjCUW'></tfoot>
    • <bdo id='WjCUW'></bdo><ul id='WjCUW'></ul>

    <small id='WjCUW'></small><noframes id='WjCUW'>

  • <i id='WjCUW'><tr id='WjCUW'><dt id='WjCUW'><q id='WjCUW'><span id='WjCUW'><b id='WjCUW'><form id='WjCUW'><ins id='WjCUW'></ins><ul id='WjCUW'></ul><sub id='WjCUW'></sub></form><legend id='WjCUW'></legend><bdo id='WjCUW'><pre id='WjCUW'><center id='WjCUW'></center></pre></bdo></b><th id='WjCUW'></th></span></q></dt></tr></i><div id='WjCUW'><tfoot id='WjCUW'></tfoot><dl id='WjCUW'><fieldset id='WjCUW'></fieldset></dl></div>

      1. <legend id='WjCUW'><style id='WjCUW'><dir id='WjCUW'><q id='WjCUW'></q></dir></style></legend>

        计算 2 模数的大幂的最快方法是什么

        时间:2023-09-16

        <small id='k0fs5'></small><noframes id='k0fs5'>

              <tfoot id='k0fs5'></tfoot>

                <i id='k0fs5'><tr id='k0fs5'><dt id='k0fs5'><q id='k0fs5'><span id='k0fs5'><b id='k0fs5'><form id='k0fs5'><ins id='k0fs5'></ins><ul id='k0fs5'></ul><sub id='k0fs5'></sub></form><legend id='k0fs5'></legend><bdo id='k0fs5'><pre id='k0fs5'><center id='k0fs5'></center></pre></bdo></b><th id='k0fs5'></th></span></q></dt></tr></i><div id='k0fs5'><tfoot id='k0fs5'></tfoot><dl id='k0fs5'><fieldset id='k0fs5'></fieldset></dl></div>
                <legend id='k0fs5'><style id='k0fs5'><dir id='k0fs5'><q id='k0fs5'></q></dir></style></legend>
                  <bdo id='k0fs5'></bdo><ul id='k0fs5'></ul>
                    <tbody id='k0fs5'></tbody>
                  本文介绍了计算 2 模数的大幂的最快方法是什么的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  对于 1 <= N <= 1000000000,我需要计算 2N mod 1000000007,它一定非常快!
                  我目前的做法是:

                  For 1 <= N <= 1000000000, I need to compute 2N mod 1000000007, and it must be really fast!
                  My current approach is:

                  ull power_of_2_mod(ull n) {
                      ull result = 1;
                      if (n <= 63) {
                          result <<= n;
                          result = result % 1000000007;
                      }
                      else {
                          ull one = 1;
                          one <<= 63;
                          while (n > 63) {
                              result = ((result % 1000000007) * (one % 1000000007)) % 1000000007;
                              n -= 63;
                          }
                  
                          for (int i = 1; i <= n; ++i) {
                              result = (result * 2) % 1000000007;
                          }
                  
                      }
                  
                      return result;
                  }
                  

                  但它似乎不够快.有什么想法吗?

                  but it doesn't seem to be fast enough. Any idea?

                  推荐答案

                  这样会更快(C 代码):

                  This will be faster (code in C):

                  typedef unsigned long long uint64;
                  
                  uint64 PowMod(uint64 x, uint64 e, uint64 mod)
                  {
                    uint64 res;
                  
                    if (e == 0)
                    {
                      res = 1;
                    }
                    else if (e == 1)
                    {
                      res = x;
                    }
                    else
                    {
                      res = PowMod(x, e / 2, mod);
                      res = res * res % mod;
                      if (e % 2)
                        res = res * x % mod;
                    }
                  
                    return res;
                  }
                  

                  这篇关于计算 2 模数的大幂的最快方法是什么的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:编译器是否优化了按值传递的函数参数? 下一篇:为已知的更常见路径优化分支

                  相关文章

                  最新文章

                  <small id='h5Huc'></small><noframes id='h5Huc'>

                  1. <tfoot id='h5Huc'></tfoot>
                    1. <i id='h5Huc'><tr id='h5Huc'><dt id='h5Huc'><q id='h5Huc'><span id='h5Huc'><b id='h5Huc'><form id='h5Huc'><ins id='h5Huc'></ins><ul id='h5Huc'></ul><sub id='h5Huc'></sub></form><legend id='h5Huc'></legend><bdo id='h5Huc'><pre id='h5Huc'><center id='h5Huc'></center></pre></bdo></b><th id='h5Huc'></th></span></q></dt></tr></i><div id='h5Huc'><tfoot id='h5Huc'></tfoot><dl id='h5Huc'><fieldset id='h5Huc'></fieldset></dl></div>
                        <bdo id='h5Huc'></bdo><ul id='h5Huc'></ul>

                      <legend id='h5Huc'><style id='h5Huc'><dir id='h5Huc'><q id='h5Huc'></q></dir></style></legend>