HDU2674: N!Again
因为2009=7^2*41; so k>=41, k! mod 2009 = 0; k<41时,直接计算就可以了。
1 #include <iostream> 2 #include <string> 3 #include <cstring> 4 5 using namespace std; 6 7 int num[45]; 8 9 void GetNum(){ 10 int n; 11 memset(num, 0, sizeof(num)); 12 num[0] = 1; 13 for(int i=1; i<41; i++){ 14 n = 1; 15 for(int j=1; j<=i; j++){ 16 n = n*j % 2009; 17 } 18 num[i] = n; 19 } 20 } 21 22 int main(int argc, char *argv[]) 23 { 24 long long n; 25 GetNum(); 26 while(cin>>n){ 27 if(n<41) 28 cout << num[n] <<endl; 29 else 30 cout << 0 <<endl; 31 } 32 33 return 0; 34 }