题意:
题目很简明: 令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\n",s);
}
return 0;
}