该题考的是模运算的性质,加思维的变换,两数之积的对m取模等于,两数各自对m取模,之积再对m取模,即(a*b)%m=(a%m*b%m)%m,本题求S=1!+2!+3!+⋯+202320232023!,求S的末尾9位数字,显然我们需要对m取模,那么我们通过循环从1开始对每个数求阶乘,将每次的结果,累加到sum中,最后再对sum%m,输出,但如果我们真的遍历到202320232023,时间显然是超时的,我们可以只循环到320232023(后9位),时间复杂度是0(1e9)也是超时的,那么我们换个思路,输出每次的sum,看有没有什么规律,我们循环到100,发现从40!开始阶乘和的后九位就不变了,那么我们最终的答案也就是这个数字
#include <bits/stdc++.h>
using namespace std;
const int m = 1e9;
#define int long long
//S=1!+2!+3!+?+202 320232023!
signed main(){
int sum = 0;
int ans = 1;
for(int i = 1;i <= 1000;i++){
ans*=i%m;
ans%=m;
sum+=ans;
sum%=m;
cout<<sum<<endl;
}
return 0;
}