让:
int k = 99999989;
k
是一个素数。
给定一些 (32-bit) int x
,我们要计算 x 阶乘 mod k。(x! % k)
一种方法如下:
int factmk(int x)
{
long long t = 1;
for (long long i = 2; i <= x; i++)
{
t *= i;
t %= k;
}
return (int)t;
};
这需要 O(x) 时间和 O(1) 空间。
factmk
在小于或等于 O(logx) 的空间中,是否有一种渐近更快的方法可以在直接 C 中实现?如果是,那是什么?如果没有,草图证明。