标签:递推
1 10 861017
593846求 n!%m=(n-1)!*n%m; 即f(n)=f(n-1)*n%m;而且 (0!+1!+...n!)%m 如果n>m 那么以后的k!都可以被m整除。。忽略然后 。。递推就可以了#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <cctype> #include <cmath> #include <cstdlib> #include <vector> #include <queue> #include <set> #include <map> #include <list> #define ll long long using namespace std; const int INF=1<<27; const int maxn=1010; int main() { int t; char n[200];int m; scanf("%d",&t); while(t--) { scanf("%s %d",n,&m); int tem; if(strlen(n)>=7) tem=999999; else sscanf(n,"%d",&tem); tem=min(m,tem); ll f1=1%m,fn,ans=f1; for(int i=1;i<=tem;i++) { fn=f1*i%m; ans+=fn; f1=fn; } printf("%lld\n",ans%m); } return 0; }
标签:递推
原文地址:http://blog.csdn.net/qq_16255321/article/details/40216107