问题描述
题目会给定n,需要你球出(1!+2!+3!+…+n!)对233333333取模的结果。
输入输出格式
输入格式
数据仅包含一行。第一行包含一个数字n。
输出格式
输出(1!+2!+3!+…+n!)对233333333取模的结果。
输入输出样例
输入样例
10
输出样例
4037913
说明
样例说明
(1!+2!+3!+…+10!)%233333333=(1+2+6+…+3628800)%233333333=4037913(%就是取模,pascal中是mod)
数据范围与约定
对于1-5测试点,n<=10^3。
对于6-8测试点,n<=10^6。
对于9-10测试点,n<=10^9。
题解
我们可以试着找一个最小的正整数$x$,满足$x! \equiv 0\left ( mod 233333333 \right )$。
则当$n \geqslant x$时,答案为$(1!+2!+3!+...+x!)mod 233333333$。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include <iostream> using namespace std; const int mod = 233333333; int n; int main() { cin >> n; int c = 1; int ans = 0; for(register int i = 1; i <= n; ++i) { c = (long long)c * i % mod; ans += c; if(ans >= mod) ans -= mod; if(!c) { cout << ans; return 0; } } cout << ans; return 0; }