Willing's Blog
导航
首页
新随笔
联系
聚合
管理
<
2010年5月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
统计
随笔 - 24
文章 - 0
评论 - 2
引用 - 0
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
(26)
ACM(26)
(rss)
随笔档案
(24)
2010年5月 (23)
2010年4月 (1)
搜索
最新评论
1. re: SGU-106 The Equation
评论内容较长,点击标题查看
--lzqxh@126.com
2. re: SGU-106 The Equation
感谢..受教了...
--Strayer
阅读排行榜
1. SGU-106 The Equation(1298)
2. SGU-169 Numbers(635)
3. SGU-207 Robbers(568)
4. SGU-124 Broken line(463)
5. SGU-302 BHTML 1.0(437)
评论排行榜
1. SGU-106 The Equation(2)
2. SGU-107 987654321 problem(0)
3. SGU-181 X-Sequence(0)
4. SGU-118 Digital Root(0)
5. SGU-154 Factorial(0)
SGU-154 Factorial
http://acm.sgu.ru/problem.php?contest=0&problem=154
给出数Q,求出最小的自然数N使得N!的末尾恰有Q个0,无解输出"No solution"
对于一个数n,求出它的末尾有几个0,只需看n之内的数的质因子5的个数,因为2的个数远多于5。所以可知道一个数末尾0的个数
Q = n/5 + n/(5^2) + n/(5^3) + ...
而题目给出的是Q,要求出的是N,由于是要求出最小的自然数,所以N必定是5的倍数,这点不多做解释。
根据等比数列的求和公式,有
Q = N(5^k - 1) / [4*(5^k)],由此得
N = 4Q * [(5^k)/(5^k-1)]
注意到 1 < (5^k)/(5^k-1) <= 5/4,且当k->无穷时,(5^k)/(5^k-1)->1,所以可先算出N=4Q的末尾零的个数与所给的Q比较,显然所求的数就在4Q的附近,所以不需要二分查找。
不知道题目的自然数包不包括0,所以提交前先去论坛看了一下,发现0不算入自然数,所以修改了下程序判断0的情况。
#include
<
stdio.h
>
int
ZeroTrail(
int
n);
int
main(
void
)
{
int
q;
scanf (
"
%d
"
,
&
q);
if
(
!
q)
{
printf (
"
1\n
"
);
return
0
;
}
int
i
=
4
*
q
/
5
*
5
;
while
(ZeroTrail(i)
<
q)
{
i
+=
5
;
}
if
(q
==
ZeroTrail(i))
{
printf (
"
%d\n
"
, i);
}
else
{
printf (
"
No solution\n
"
);
}
return
0
;
}
int
ZeroTrail(
int
n)
{
int
count
=
0
;
while
(n)
{
count
+=
n
/
5
;
n
/=
5
;
}
return
count;
}
posted on 2010-05-03 15:03
Willing
阅读(381)
评论(0)
编辑
收藏
引用
所属分类:
ACM
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
SGU-340 Tex2HTML
SGU-397 Text Editor
SGU-207 Robbers
SGU-406 Goggle
SGU-460 Plural Form of Nouns
SGU-404 Fortune-telling with camomile
SGU-403 Scientific Problem
SGU-302 BHTML 1.0
SGU-274 Spam-filter
SGU-297 Fair-play
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理