hdu 1124(数论,求末尾0的个数)
2013-04-26 19:54
267 查看
点击打开链接
//
分析:
任何一个自然数N都可以因式分解 n=2^a*3^b*5^c...=10^c*2^(a-c)*3^b...
又因为值较小的幂值一定大于值较大的幂值,所以a-c>0,所以只需要求出其中5的幂值就可以求出末尾有几个0了。。
如N=26,阶乘中包含因数5、10、15、20、25,可知5的幂次为6。5=5*1,10=5*2,15=5*5,20=5*4,25=5*5,求解时用26/5=5,
再用5/5=1,再用1/5=0,所以总幂次为5+1+0=6。为什么可以这样求?在N!中数是连续增加的,5也是以其倍数渐进增加,一直增加到不大于N且是5的整数倍的最大整数。
这样一来就可以用N/5来确定出现多少个5了。当然,这还不够。比如26/5=5,与其幂次为6不符!原因在于25=5*5,其中含有2个5!所以,又有了紧接着的5/5=1,1/5=0了。
#include"stdio.h"
#include"string.h"
int main()
{
int i,a;
int ans,n;
while(scanf("%d",&n)!=-1)
{
for(i=0;i<n;i++)
{
ans=0;
scanf("%d",&a);
while(a)
{
ans+=a/5;
a/=5;
}
printf("%d\n",ans);
}
}
return 0;
}
//
分析:
任何一个自然数N都可以因式分解 n=2^a*3^b*5^c...=10^c*2^(a-c)*3^b...
又因为值较小的幂值一定大于值较大的幂值,所以a-c>0,所以只需要求出其中5的幂值就可以求出末尾有几个0了。。
如N=26,阶乘中包含因数5、10、15、20、25,可知5的幂次为6。5=5*1,10=5*2,15=5*5,20=5*4,25=5*5,求解时用26/5=5,
再用5/5=1,再用1/5=0,所以总幂次为5+1+0=6。为什么可以这样求?在N!中数是连续增加的,5也是以其倍数渐进增加,一直增加到不大于N且是5的整数倍的最大整数。
这样一来就可以用N/5来确定出现多少个5了。当然,这还不够。比如26/5=5,与其幂次为6不符!原因在于25=5*5,其中含有2个5!所以,又有了紧接着的5/5=1,1/5=0了。
#include"stdio.h"
#include"string.h"
int main()
{
int i,a;
int ans,n;
while(scanf("%d",&n)!=-1)
{
for(i=0;i<n;i++)
{
ans=0;
scanf("%d",&a);
while(a)
{
ans+=a/5;
a/=5;
}
printf("%d\n",ans);
}
}
return 0;
}
相关文章推荐
- HDU 1124 求末尾0的个数,函数 [ x ] , { x } 在数论中的小应用
- hdu 1124 Factorial 数论,就是求一个数的阶乘的结果末尾有多少0.
- ACM 数论 hdu 1124 Factorial
- hdu 1124 Factorial (快速求n!末尾0的个数)
- hdu 1124 Factorial(数论)
- hdu 1124 Factorial(数论:推理)
- HDU 1124 Factorial(简单数论)
- HDU 1124 Factorial(简单数论)
- hdu 1124 数论
- hdu 1124(数论)
- hdu 1124 OR toj 1065 简单数论
- HDU 1124 Factorial(数论)
- http://acm.hdu.edu.cn/showproblem.php?pid=1124 N!末尾0的个数
- HDU 1124(数论)
- hdu 1124 Factorial(末尾0)
- HDU 1124 Factorial(数论)
- HDU 1124 Factorial (数论)
- HDU 1124 Factorial(数论)
- ACM 数论 HDU 1452 Happy 2004 积性函数
- HDU 4861 Couple doubi (数论)