可怜的小明还是小学生,编程教练就给他出了一道题。这道题给出了一个n和p,让他求(1!+2!+3!+…+n!) mod p的值。小明算了一个小时都没算完,他已经崩溃了。于是他找到了你,想让你帮忙解决这道疯狂的题。
注:n!表示n的阶乘,即1×2×⋯×n
//#include<bits/stdc++.h>
//using namespace std;
//long long n,p,num,sum;
//int main(){
// cin>>n>>p;
// if(n>p)n=p-1;
// for(int i=1;i<=n;i++){
// num=1;
// for(int j=2;j<=i;j++){
// num*=j;
// num%=p;
// if(num==0)break;
// }
// sum+=num;
// sum%=p;
// }
// cout<<sum;
// return 0;
//}
#include<bits/stdc++.h>
using namespace std;
long long n,p,num,sum;
long long m(long long s){
long long t=0;
for(long long i=1;i<=sqrt(s);i++){
if(s%i==0)t=max(t,max(i,s/i));
}
return t;
}
int main(){
cin>>n>>p;
if(n>p)n=p-1;
n=min(m(p),n);
for(int i=1;i<=n;i++){
num=1;
for(int j=2;j<=i;j++){
num*=j;
num%=p;
if(num==0)break;
}
sum+=num;
sum%=p;
}
cout<<sum;
return 0;
}
#[数据范围] 对于100%的数据,1≤n≤10^16,1≤p≤10000000。
看似简单,如不优化,必定超时