1. 程式人生 > >HDU 2674 N!Again

HDU 2674 N!Again

Problem Description

WhereIsHeroFrom:             Zty, what are you doing ?
Zty:                                     I want to calculate N!......
WhereIsHeroFrom:             So easy! How big N is ?
Zty:                                    1 <=N <=1000000000000000000000000000000000000000000000…
WhereIsHeroFrom:             Oh! You must be crazy! Are you Fa Shao?
Zty:                                     No. I haven's finished my saying. I just said I want to calculate N! mod 2009


Hint : 0! = 1, N! = N*(N-1)!

Input

Each line will contain one integer N(0 <= N<=10^9). Process to end of file.

Output

For each case, output N! mod 2009

Sample Input

4

5

Sample Output

24

120

Author

WhereIsHeroFrom

程式碼及註釋如下:

/*
2009及之後的mod2009都等於0;
前面的測了一下發現41mod2009就等於0了...
綜上40之後的mod2009=0.
40之前的需要算一波
*/
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int a[50];
int n;
void Init()
{
   a[0]=1;
   a[1]=1;
   for (int i=2;i<=40;i++)
   {
       a[i]=a[i-1]*i%2009;
   }
}
int main()
{
    Init();
    while (scanf("%d",&n)!=EOF)
    {
         if(n<=40)
            printf("%d\n",a[n]);
         else
            printf("0\n");
    }
    return 0;
}