【发布时间】:2014-07-20 12:00:30
【问题描述】:
我需要计算一个大数 (
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;
}
【问题讨论】:
-
使用模运算 modmul 而不是 * ,不要使用 N 次递归以避免堆/堆栈垃圾/溢出,并尽可能使用快速阶乘(例如,这个 stackoverflow.com/a/18333853/2521214 是我的芽需要表素数最多 N ,但还有更多...)
-
别忘了,你可以在
O(sqrt(n))时间计算。
标签: c algorithm modulo factorial