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  }

 

posted @ 2013-05-01 12:02  加拿大小哥哥  阅读(183)  评论(0编辑  收藏  举报