#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cassert>
#include<ctime>
using namespace std;
int main()
{
const int MOD=1000000;
int i,j,n,s=0;
scanf("%d",&n);
if(n>25) n=25;
for(i=1;i<=n;i++)
{
int factorial=1;
for(j=1;j<=i;j++)
factorial=(factorial*j%MOD);
s=(s+factorial)%MOD;
}
printf("%d\n",s);
printf("Time used=%.2lf\n",(double)clock()/CLOCKS_PER_SEC);
return 0;
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cassert>
#include<ctime>
using namespace std;
int main()
{
const int MOD=1000000;
int i,j,n,s=0;
scanf("%d",&n);
if(n>25) n=25;
for(i=1;i<=n;i++)
{
int factorial=1;
for(j=1;j<=i;j++)
factorial=(factorial*j%MOD);
s=(s+factorial)%MOD;
}
printf("%d\n",s);
printf("Time used=%.2lf\n",(double)clock()/CLOCKS_PER_SEC);
return 0;
}
可以先通过超时函数找出规律,发现从40开始结果一直不变,
事实上是因为25!的末尾有六个0;