我需要计算一个大数(小于等于1,000,000)的阶乘,并且需要对1000000007取模得出结果。我写了下面的代码,但是在运行时会出现错误(test.exe已停止工作)。它只适用于小数字。
long long unsigned modulo(long long unsigned nr){
return nr % 1000000007;
}
long long unsigned fact(long long unsigned nr){
if(nr)return modulo(nr * fact(nr - 1));
else return 1;
}
更新1:
long long unsigned fact(long long unsigned nr){
long long unsigned r = nr;
while(--nr){
r = modulo(r * nr);
}
return r;
}
O(sqrt(n))
的时间内计算它。 - Tacet