这个题要求(0!+1!+2!+......+n!)%m
其中 n< 10^100,m < 10^6
这道题我一开始SB的以为当n!后六位稳定为0的时候就对结果没有影响了,实际上那个只是对模10^k(1<=k<=6)没有影响╮(╯_╰)╭
然后晓东说这道题应该这样
由于n! = n * (n-1) * (n-2) * ....* 3 * 2 * 1 所以 n%m 在n >= m 的时候一定为0,所以最多求10^6个数的和,这个O(n)的效率可以接受。
然后用一个变量维护阶乘一个变量维护和即可。(晓东的做法,实践证明比我的快)
我的思路是这样的
0! = 1
1! = 1 * 2
2 ! = 1 * 2 * 3
.
.
.
n! = 1 * 2 * 3 * ....* (n-1) * n;
第n项加上第n-1项为
1 * 2 * 3 * .... * (n-2) * (n-1)*(n + 1)
上式再加上第n-2项为
1 * 2 * 3 * .... * (n-3) * (n-2)* ( (n-1)*(n + 1) + 1)
以此类推
代码:
此题注意两点,一是要用 long long 二是输入 0 1的情况,因为最后没有取模,会得出1来,解决办法就是最后输出的时候取模