首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高效计算pow(a,nCr) %m

高效计算pow(a,nCr) %m
EN

Stack Overflow用户
提问于 2017-10-21 14:51:10
回答 1查看 37关注 0票数 1

我认为有一些过程来计算功率(a,nCr)%b?但是我想知道如何在编程中有效地解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2017-10-26 06:34:43

我能想到一种方法,它只有~O(n^2*log(m)),并且不需要使用大整数。我有一个更快的方法(类似于O(k*log(m)*log(n)))的概念,如果你可以分解m,你可以分解一些ktotient(m/gcd(a^k,m)),但它会变得非常麻烦。

在任何情况下,对于O(n^2*log(m))方法,我们都将利用nCr == (n-1)C(r-1) + (n-1)Cr这一事实

下面是nCr的计算,它利用了这一点:

代码语言:javascript
复制
def nCr(n0,r0):
  memoized = {}

  def go(n,r):
    if r == 0 or r == n:
      return 1
    if (n,r) not in memoized:
      memoized[(n,r)] = go(n-1,r-1) + go(n-1,r)
    return memoized[(n,r)]

  return go(n0,r0)

您的powChooseMod函数的代码将几乎相同:

代码语言:javascript
复制
def powChooseMod(a,n0,r0,m):
  memoized = {}

  def go(n,r):
    if r == 0 or r == n:
      return a
    if (n,r) not in memoized:
      memoized[(n,r)] = go(n-1,r-1) * go(n-1,r) % m
    return memoized[(n,r)]

  return go(n0,r0)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46860801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档