HDU--2674 N!Again

网友投稿 638 2022-11-13

HDU--2674 N!Again

HDU--2674   N!Again

N!Again

Time Limit: 2000/1000 MS (Java/Others)   Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 3339    AcceptedSubmission(s): 1794

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! Youmust be crazy! Are you Fa Shao?

Zty:                                    No. I haven's finished my saying. I just said I want to calculate N! mod2009

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

Input

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

Output

For each case, output N! mod 2009

Sample Input

4 5

Sample Output

24 120

仔细分析一下,查找2009的因子,2009=41*49;

故当n>=41,可知结果为0;

/***************Author:jiabeimuweiSources:HDU2674Times:109ms***************/#include#includeusing namespace std;int main() { int t,n,i,j; while(cin>>n) { if(n>=41) { cout<<0<=1) { t=t*n; t=t%2009; n--; } cout<

改进了一下,用字符串;

时间提高到0ms;

/****************Times:0ms;****************/#include#includeint main(){ char str[26]; int i; int t,c; while(scanf("%s",str)!=-1) { if(strlen(str)>3) { printf("0\n"); continue; } t=0; for(i=0; str[i]; i++) { t=t*10; t=t+str[i]-'0'; } if(t>40) { printf("0\n"); continue; } c=1; for(i=2; i<=t; i++) { c=c*i; c=c%2009; if(c==0) break;//加上这一行判断,时间立马变为0ms。 } printf("%d\n",c); }}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:UVA 10006 - Carmichael Numbers 数论(快速幂取模 + 筛法求素数)
下一篇:Aha!设计模式(42)-创建型模式的讨论(1)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~