用公式 (a*b)%n=(a%n)*(b%n)%n
还有就是 2009 = 7 * 7 * 4141!=41*40*...*21*...*7*...1;
也就是说41以上的阶乘对2009取余都是为0
1%2009
(1*2)%2009=(1%2009)*(2%2009)%2009
(1*2*3)%2009=(1%2009)*(2%2009)*(3%2009)%2009%2009
ans=1;
for(int i=2;i<=n;i++)
ans=ans*(i%2009)%2009;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <iostream>
#include <math.h>
#include"queue"
#include"set"
#include"string"
#include"vector"
using namespace std;
int main()
{
int n;
while(cin>>n)
{
if(n>=41) cout<<0<<endl;
else if(n==0||n==1) cout<<1<<endl;
else
{
int ans=1;
for(int i=2;i<=n;i++)
ans=ans*(i%2009)%2009;
cout<<ans<<endl;
}
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <iostream>
#include <math.h>
#include"queue"
#include"set"
#include"string"
#include"vector"
using namespace std;
int f(int n)
{
if(n>=41) return 0;
else if(n==1||n==0) return 1;
else return (n%2009)*f(n-1)%2009;
}
int main()
{
int n;
while(cin>>n)
{
cout<<f(n)<<endl;
}
return 0;
}