ACM程序设计选修课——1024: 末位零(求末尾0的方法+可有可无的快速幂)
1024: 末位零
Time Limit: 1 Sec Memory Limit: 32 MB
Submit: 60 Solved: 11
[Submit][Status][Web Board]
Description
给定一个正整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=3 628 800,N!的末尾有两个0。
注意:N<=100,000,000
Input
第一行为N,表示有N个输入。接下来有N行,每一行包括一个正整数。
Output
对于每个输入,每行输出结果
Sample Input
2
5
10
Sample Output
1
2
求N的阶乘的末尾几个0,刚开始只知道出现2与5就会有0,后来百度一下发现只要是5的倍数均会+1,贴上原帖思路:
把从 1000 到 1 这些所有的数,只要是5的倍数的,一律分解成含因子5为止。
例如
10 = 2 * 5
15 = 3 * 5
25 = 5 * 5
50 = 2 * 25 = 2 * 5 * 5
100 = 4 * 25 = 4 * 5 * 5
105 = 21 * 5
125 = 5 * 5 * 5 余此类推。
从1 到1000,能被5 整除的数有 1000/5 = 200 个 能被5的平方即25整除的数有 1000/25 = 40 个 能被5的立方即125整除的数有 1000/125 = 8 个
能被5的4次方即625 整除的数有 1000/625 = 1个 (即625自己)
把这1000个数,只要能分解出因子5,就一直分解到因子5为止。共可分解出 200 + 40 + 8 + 1 = 249 即最终可分解出 249 个5。
只要有1个5,与偶数相乘后就会出现1个0。 而 从1 到1000,偶数的数量是足够的,所以 有249个5,乘积结果中就有249个0。
由于数据比较大到10^8用longlong,又可以用到可爱的快速幂了,13次方显然没卵用- -|||.
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<set>
#include<map>
#include<sstream>
#include<algorithm>
#include<cmath>
#include<cstdlib>
using namespace std;
inline long long POW5(int b)
{long long r=1,bas=5;while (b!=0)//蛋疼b写成rWA了一次{if(b&1)r*=bas;bas*=bas;b>>=1;}return r;
}
int main (void)
{long long n,temp;int t;scanf("%d",&t);while (t--){scanf("%lld",&n);long long ans=0;for (int i=1; i<13; i++)//5的13次我用计算器算了一下大于10^8次了,直接到这够了{temp=POW5(i);//调试方便查看ans=ans+n/temp;}cout<<ans<<endl;}return 0;
}
转载于:https://www.cnblogs.com/Blackops/p/5356407.html
ACM程序设计选修课——1024: 末位零(求末尾0的方法+可有可无的快速幂)相关推荐
- 2015多校10 1006.CRB and Puzzle HDU5411(邻接矩阵求k长路条数,矩阵快速幂
题意:有若干字符,现在要把它们连成一个字符串,每种字符后面只能接特定种类的字符,现在询问能连接出的长度小于等于m的字符串有多少种. 思路:我们可以把这个转移关系看成一个图,如果字符a后面可以接b,那么 ...
- ACM程序设计选修课——1036: Hungar的菜鸟赛季(YY)
1036: Hungar的菜鸟赛季 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 20 Solved: 14 [Submit][Status][Web ...
- ACM程序设计选修课——1030: Hungar的时尚球场(水题+耐心)
1030: Hungar的时尚球场 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 14 Solved: 8 [Submit][Status][Web ...
- 线性递推式+求第N项,用矩阵快速幂 如何构造初始矩阵
转载于:https://www.cnblogs.com/lhclqslove/p/9438095.html
- 快速幂算法和大整数求模
** 1.快速幂的算法** (1)当我们求一个数的n次方的的结果时,若直接选择for循环,来累乘的话,效率很低,时间复杂度位O(n),而当我们选择快速幂来计 算时,时间复杂度能达到O(logn),快了 ...
- 【经典智力题】1024! 末尾有多少个0?——“计算阶乘末尾0的数量”问题引出
网上有这样一个广为流传的有趣问题: 1024! 末尾有多少个0? 相应的解法是: 末尾0的个数取决于乘法中因子2和5的个数.显然乘法中因子2的个数大于5的个数,所以我们只需统计因子5的个数. 是5的倍 ...
- 利用矩阵快速幂求斐波那契数列
我们知道如果用记忆化搜索逐项递推可以将复杂度降低到O(n),但是对于更大规模的输入,这个算法效率还是不够高,那么我们考虑更高效的算法: 二阶递推:f(n+2)=(1 1) f(n+1) f(n+1) ...
- 蓝桥杯 算法提高 递推求值(矩阵快速幂)详解
传送门 问题描述 已知递推公式: F(n, 1)=F(n-1, 2) + 2F(n-3, 1) + 5, F(n, 2)=F(n-1, 1) + 3F(n-3, 1) + 2F(n-3, 2) + 3 ...
- NYOJ 301 递推求值(矩阵快速幂)
递推求值 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给你一个递推公式: f(x)=a*f(x-2)+b*f(x-1)+c 并给你f(1),f(2)的值,请求出f(n ...
- ZYH的斐波那契数列【线段树动态开点+矩阵快速幂求斐波那契】
描述 ZYH最近研究数列研究得入迷啦! 现在有一个斐波拉契数列(f[1]=f[2]=1,对于n>2有f[n]=f[n-1]+f[n-2]), 但是斐波拉契数列太简单啦,于是ZYH把它改成了斐波拉 ...
最新文章
- 第四次作业 结对编程-黄金点游戏
- Mvc 4.0实现Response.Write()效果
- 系统目录 linux命令,linux基础命令之系统目录(示例代码)
- dede后台文章无法编辑(出现空白)的解决办法
- 天涯明月刀服务器维护,天涯明月刀手游维护时间表一览,维护什么时候结束?[多图]...
- Windows常用密码的破解方法
- shell美元符_Linux Shell中的美元符号$ | 学步园
- jw player去掉logo 二次开发
- Mocha.js官方文档翻译 —— 简单、灵活、有趣
- 获取电信光猫超级密码 获取宽带账号密码 获取公网ip
- A19.从零开始前后端react+flask - 删除前后端数据
- WP免费主题,wordpress免费主题,WP建站主题
- 全国省市县信息sql脚本
- Linux文本处理三剑客(awk、grep、sed)
- C#.net 微信公众账号接口开发
- 盖茨和李嘉诚双龙卸甲 他们的区块链业务一个在链圈扶贫 一个在币圈赚钱
- Java-实现飞机躲子弹游戏
- 用java计算电阻,NTC热敏电阻计算公式
- python绘制横向柱状图 妈妈再也不用担心我不会画图了
- oracle审计查询sql语句,Oracle 数据库审计