HDU 2674

  题意:求N!mod2009,N<10^9。

  不确定时可以借助计算器(calc)。

  2009=7*7*41,N>=41时,N!因式分解一定含7*7*41,即N!%2009=0.所以只要计算0<=N<=40时的答案就OK。设N!=m+2009*n,N!%2009=m,(N+1)!%2009=[(N+1)*(m+2009*n)]%2009=[m*(N+1)]%2009,有了这个就可以轻易递推求解了。

 1  #include<stdio.h>

 2  int main()

 3  {

 4      int a[41];

 5      int i;

 6      a[0]=1;

 7      /*

 8         tmp=1;  

 9         while(n>=1)  

10         {  

11             tmp*=n;  

12             tmp%=2009;  

13             n--;  

14         }  

15         用long long保存会越界 

16         

17         

18         或者

19         ans=1;  

20         for(i=2;i<=n;i++)  

21         {  

22             ans*=i;  

23             ans%=2009;  

24             if(ans==0)  break;  

25         }  

26   

27  

28      */

29      for(i=1;i<41;i++)

30          a[i]=(a[i-1]*i)%2009;

31      while(scanf("%d",&i)!=EOF)

32      {

33          if(i<41)

34              printf("%d\n",a[i]);

35          else

36              printf("0\n");

37      }

38      return 0;

39  }

 

你可能感兴趣的:(HDU)