杭电2674

题意:求N!%2009(起初以为是求N!,搞死人)

Analyse: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,有了这个就可以轻易递推求解了。

View Code
 1 #include<stdio.h>
 2 int main()
 3 {
 4     int a[41];
 5     int i;
 6     a[0]=1;
 7     for(i=1;i<41;i++)
 8         a[i]=(a[i-1]*i)%2009;
 9     while(scanf("%d",&i)!=EOF)
10     {
11         if(i<41)
12             printf("%d\n",a[i]);
13         else
14             printf("0\n");
15     }
16     return 0;
17 }
18     
posted @ 2012-07-19 16:15  Hogg  阅读(146)  评论(0)    收藏  举报