【问题标题】:Recursive function for computing the quantity of (n! mod M) [duplicate]用于计算(n!mod M)数量的递归函数
【发布时间】:2014-06-18 06:18:14
【问题描述】:

有没有人知道计算数量的方法

n! mod M

这样溢出不是问题吗?我想不出如此大的 n 值不会导致问题的任何事情。

【问题讨论】:

标签: algorithm recursion factorial


【解决方案1】:

如果您使用 Big Integer 库,它将永远不会溢出。但是,根据您想要的算法和位数,执行可能需要数年时间。

【讨论】:

    【解决方案2】:

    假设n * (n-1)没有溢出,你可以在每次乘法后取乘积mod M

    更新:正如Dukeling 非常耐心地向我解释的那样,上述假设不是足够 条件以确保 应用该方法mod M 每次乘法后将保证不会溢出。

    足够条件是(M-1)*(n mod M) 不会溢出,因为这是在采用mod 之前可能产生的最大可能结果。

    【讨论】:

    • 它应该更像(M-1)*(n mod M) 不应该溢出。考虑5! mod 3050 的溢出。 5*4 << 50,但它溢出了。
    • 你可以得到mod M的最大数字是M-1M 也应该没问题。要获得更精确的界限,您也可以将n 替换为n-1
    • M-1 是最大的数字,因此也是最大的产品,可以在后期存在,乘以最大的单个数字n,为您提供最大的产品前期。
    • @Dukeling,请写一个单独的答案。我没有关注如何找到最大的产品 pre-mod 来让你计算 n!
    • 我想我不能比我已经做过的更好地解释它了。我只是指出您的答案中的n * (n-1) 是错误的,应该改为(M-1)*(n mod M) - 这本身不是答案,而是对您的更正。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多