题意:
题目很简明: 令S[n]=1*1!+2*2!+3*3!+4*4!+....+n*n! 求S[n]%10000007
多组测试数据 每组一个n n的范围:1<=n<=1000000
思路:看代码看懂的,数学真的有魔性。最重要的算法是<同余与模算术刘汝佳/p314>,这个题还用了一个小技巧:在求n*n!的时候<!的优先级大于*的优先级>由于已经知道(n-1)!%mod=t,所以呢,只需要在t的基础上乘n即可。大神的代码,有改进。
<pre name="code" class="cpp">#include<stdio.h> const int mod=10000007; int main() { int n; while(~scanf("%d",&n)){ int i; long long s=0,t=1; for (i=1;i<=n;i++){ t=(t*i)%mod; s=(s+(t*i)%mod)%mod; } printf("%lld ",s); } return 0; }