HDU 1124 Factorial (阶乘后缀0)
2015-06-27 19:01
375 查看
题意: 给一个数n,返回其阶乘结果后缀有几个0。
思路:
首先将n个十进制数进行质因数分解,观察的得到只有2*5才会出现10。那么n!应含有min(2个数,5个数)个后缀0,明显5的个数必定比2少,所以后缀0的个数为质因数后的5的个数。
为何这么说?例如n=15,那么{1 2 3 4 5 6 7 8 9 10 11 12 13 14 15},那么可以产生2的数字有{2,4,6,8,10,12,14},可以产生5的只有{5,10,15},质数中只有2乘以5才能形成10,那么min(2个数,5个数)就决定了可以产生10的个数,也就决定了产生的0的个数。
想将[1,n]逐个进行质因数分解来取统计5的个数?不用,有更简单的方法。
假设n=15,将n/5得到3,则[1,15]中有3个是5的倍数即{5,10,15},只有是5的倍数才能产生质因数5,那么count+=3。接着,这3个数字可能还很大,除以5之后也许还能继续被5除(例如25就可以除两次)。然而{5,10,15}除完之后变成了{1,2,3},这个序列一定是连续的自然数,由于全都小于5,那肯定是没能再有5的产生了。假如n/5大于5呢?那么[1,n]中的5的倍数肯定会变成[1,n/5],又是一个阶乘的形式,继续用上面的方法继续拆出所有的5,直到n/5/5/5...的结果小于5为止。每次n/5之后的数就是count的结果。
AC代码
思路:
首先将n个十进制数进行质因数分解,观察的得到只有2*5才会出现10。那么n!应含有min(2个数,5个数)个后缀0,明显5的个数必定比2少,所以后缀0的个数为质因数后的5的个数。
为何这么说?例如n=15,那么{1 2 3 4 5 6 7 8 9 10 11 12 13 14 15},那么可以产生2的数字有{2,4,6,8,10,12,14},可以产生5的只有{5,10,15},质数中只有2乘以5才能形成10,那么min(2个数,5个数)就决定了可以产生10的个数,也就决定了产生的0的个数。
想将[1,n]逐个进行质因数分解来取统计5的个数?不用,有更简单的方法。
假设n=15,将n/5得到3,则[1,15]中有3个是5的倍数即{5,10,15},只有是5的倍数才能产生质因数5,那么count+=3。接着,这3个数字可能还很大,除以5之后也许还能继续被5除(例如25就可以除两次)。然而{5,10,15}除完之后变成了{1,2,3},这个序列一定是连续的自然数,由于全都小于5,那肯定是没能再有5的产生了。假如n/5大于5呢?那么[1,n]中的5的倍数肯定会变成[1,n/5],又是一个阶乘的形式,继续用上面的方法继续拆出所有的5,直到n/5/5/5...的结果小于5为止。每次n/5之后的数就是count的结果。
#include <bits/stdc++.h> #define LL long long using namespace std; int f(unsigned int n) { if (n < 5) { return 0; } return n / 5 + f(n / 5); } int main() { //freopen("input.txt", "r", stdin); unsigned int t, a; cin>>t; while(t--) { scanf("%d",&a); printf("%d\n",f(a)); } return 0; }
AC代码
相关文章推荐
- u盘安装xp,win7 win8系统
- 一个C# Process编写的文件执行类
- C语言打印字母金字塔(第一行是A 第二行是ABA ……)
- tomcat配置虚拟主机
- Kaggle Bike Sharing Demand Prediction – How I got in top 5 percentile of participants?
- mybatis的批量操作
- C# CancellationTokenSource 终止线程 CancellationTokenSource实现对超时任务的取消
- HDOJ 5029 Relief grain
- Ubuntu中怎样安装sftp服务
- A Statistical View of Deep Learning (I): Recursive GLMs
- linux程序设计——make命令和makefile文件(第九章)
- 虚拟机之间的信息通信机制
- 解决 如何删除Android studio中创建的工程!
- 反病毒工具-Wsyscheck,Xuetr,PowerTool
- 转 Spring 组件 <context:component-scan base-pakage="">用法
- php
- Why GEMM is at the heart of deep learning
- Android SnackBar
- 显示指定的表或视图的数据和索引的碎片信息。
- HTML5系列四(特征检测、Modernizr.js的相关介绍)