计算ncr mod p

时间:2019-06-26 11:10:13

标签: c++

输入:

9

524645 379018

934126 888771

877255 187002

794376 704320

515429 925706

744641 544701

500831 147443

134241 544167

466755 263186

输出:阶乘函数中的堆栈溢出

在引发异常时计算阶乘时

传递的值为a = 374315

但是在hackerrank上它被接受了,你能告诉我它为什么发生吗?

我只是在下面的程序中计算ncr mod p,并且堆栈溢出 在上述特定实例中。

#include <iostream>

using namespace std;
int k = 1000000007;

long long f(long long a)
{
    if (a < 2)
        return 1;
    else
        return (a*f(a - 1)) % k;
}

long long modpow(long long base, long long exp, long long modulus)
{
    base %= modulus;
    long long result = 1;

    while (exp > 0)
    {
        if (exp & 1)
            result = (result * base) % modulus;

        base = (base * base) % modulus;
        exp >>= 1;
    }

    return result;
}


int main()
{
    int t, m, n;
    cin >> t;

    while (t--)
    {
        cin >> m >> n;


        long long temp = (f(n - 1) % k*f(m - 1) % k) % k;
        temp = modpow(temp, k - 2, k); //(f(n)*f(m-1))^(10000000007-2)

        long long result = (f(n + m - 2) % k*temp%k) % k;

        cout << result << endl;
    }

    return 0;
}

https://www.hackerrank.com/challenges/matrix-tracing/problem

0 个答案:

没有答案