4 5
24 120
题意:求N! mod 2009
orz
也是醉了,刚开始还傻呆呆地找规律,利用同余一直求到了41!,发现之后的结果全是0,这时才反应过来,N! mod 2009 ,当N!能够被2009整除时,取模的结果均为0,那剩下的就是判断一下什么时候能够被2009整除
对2009分解质因数,可得2009=7*7*41,所以我们使N!有约数41就可以被2009整除了,所以才会从41!开始 mod 2009的结果均为0因此我们只需先算好前40项mod 2009的结果就可以了,N>40的结果都是0
#pragma comment(linker, "/STACK:1024000000,1024000000") #include<stdio.h> #include<string.h> #include<stdlib.h> #include<queue> #include<math.h> #include<vector> #include<map> #include<set> #include<stdlib.h> #include<cmath> #include<string> #include<algorithm> #include<iostream> #define exp 1e-10 using namespace std; const int N = 41; const int inf = 2147483647; const int mod = 2009; int s[N]; int main() { int n,i; s[0]=1; for(i=1;i<=40;i++) s[i]=(s[i-1]*i)%mod; while(~scanf("%d",&n)) if(n>40) puts("0"); else printf("%d\n",s[n]); return 0; }菜鸟成长记