阶乘相关<同余与模算术>

题意:
题目很简明:
令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;
}


想的太多,做的太少。
原文地址:https://www.cnblogs.com/pealicx/p/6115643.html