本题巨坑,事实上从41往后余数就已经是0了。所以n>=41之后直接输出0。。
这也提醒我们可以直接输出前一部分结果看看规律。。。
另外本题有一个模运算的运算规律 (a * b) % p = (a % p * b) % p
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int N;
int n[50]={1,1,0};
for(int i = 2; i < 41; i++)
n[i] = (n[i-1] * i) % 2009;
while(scanf("%d",&N) != EOF)
{
if(N >= 41) cout << "0" << endl;
else cout << n[N] << endl;
}
return 0;
}