4 5
24 120
题目大意:求n!%2009.
直接求解必定超时,能不能缩小范围呢,我刚开始想n%=2009但是确实没有证据这么做果然WA。但是%2009显然当阶乘到2009
以后的时候每次必有2009为因子,故一定为0,但阶乘的值太大,那么就可以想到什么时候阶乘可以达到含有2009这个因子,
2009=41*7*7所以40阶乘后全为0.
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<cmath> #define LL long long #define mod 2009 #define inf 0x3f3f3f3f using namespace std; int main() { LL n,m,j,k; while(~scanf("%lld",&n)) { k=1; if(n>40) { printf("0\n");continue; } for(int i=1;i<=n;i++) { k=(k%mod*i%mod)%mod; } printf("%lld\n",k); } }