HDU 2674

简介:   题意:求N!mod2009,N=41时,N!因式分解一定含7*7*41,即N!%2009=0.所以只要计算0

  题意:求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  }

 

目录
相关文章
|
6月前
|
Java
hdu-2546-饭卡
hdu-2546-饭卡
29 0
|
人工智能 Java
hdu 1712 ACboy needs your help
ACboy这学期有N门课程,他计划花最多M天去学习去学习这些课程,ACboy再第i天学习第j门课程的收益是不同的,求ACboy能获得的最大收益。
137 0
|
机器学习/深度学习 算法
|
机器学习/深度学习
hdu1059Dividing
题意:有6种石头,价值分别是1,2,3,4,5,6   每种有若干,作为输入数据。问能否把这些石头按照价值均分? 分析:多重背包问题。 代码: View Code 1 #include 2 #include 3 #include 4 using namespace...
870 0