nefu 118 n!后面有多少个0 算数基本定理,素数分解
2024-08-28 01:05:54
n!后面有多少个0 |
||
|
||
description |
||
从输入中读取一个数n,求出n! 中末尾0的个数。 |
||
input |
||
输入有若干行。第一行上有一个整数m。指明接下来的数字的个数。然后是m行,每一行包括一个确定的正整数n,1<=n<=1000000000。 |
||
output |
||
对输入行中的每个数据n,输出一行,其内容是n!中末尾0的个数。 |
||
sample_input |
||
3 |
||
sample_output |
||
0 |
考查的素数基本定理的性质,素数基本定理:每一个大于1的正整数n都能被唯一地写成素数的乘积,在乘积中的素因子依照非降序排列。n=(p1^a1)*(p2^a2)*.....*(pk^ak).
n!
的素因子分解中的素数p的幂为: [n/p]+[n/p^2]+[n/p^3]+.........
再看这个题,说n!
后面有几个0。显然我们不能算出n。。所以我们得找特征。
对于随意一个正整数。若对其进行因式分解,那么其末尾的0必定能够分解成2*5,所以每个0必定和一个5相应,但同一时候还须要有2才行。而对于n!,在因式分解中,因子2的个数要比因子5的个数多,所以假设存在一个因子5,那么它必定相应着n!末尾的一个0,那么本题就变为求n!的分解中因子5的个数,那么上面的公式就派的上用场了。
代码例如以下:
#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
int i,j,s,n;
int cas,ans,t;
scanf("%d",&cas);
while(cas--)
{
scanf("%d",&n);
s=5;ans=0;t=n/5;
while(t!=0)
{
ans+=t;
s*=5;
t=n/s;
}
printf("%d\n",ans);
}
return 0;
}
最新文章
- ABP源码分析十八:UI Inputs
- echarts学习总结
- maven更改编译环境的java版本
- HDU 4811 Ball -2013 ICPC南京区域现场赛
- php发送post包
- Android_就像小朋友“搭积木”一样。
- .bss 段 block started symbol
- ARCGIS二维三维互动
- cas配置全攻略(转)
- Codeforces Round #434 (Div. 2, based on Technocup 2018 Elimination Round 1)&;&;Codeforces 861B Which floor?【枚举,暴力】
- Switch-case 内定义变量的问题
- (hdu)4858 项目管理 (vector)
- java-类、对象
- Android项目实战(四十一):游戏和视频类型应用 状态栏沉浸式效果
- JAVA 数据类型数组
- QChart绘制折线区域
- 20172302 《Java软件结构与数据结构》实验一:线性结构实验报告
- Oracle12c CDB架构图
- 各种linux小操作
- NGS的duplicate的问题
热门文章
- Git学习笔记(二) 远程仓库及分支
- Intellij IDEA错误识别.xml文件
- SpringBoot整合Quartz定时任务
- PHP图片的类型将其自动编码成base64
- Centos:mysql的安装和使用:yum方式
- webpack配置:打包第三方类库、第三方类库抽离、watch自动打包、集中拷贝静态资源
- php中将SimpleXMLElement Object数组转化为普通数组
- shell中单引号、双引号、反引号的区别
- [Functional Programming] Pull Many Random Numbers in a Single State ADT Transaction
- Java8 增强的Future:CompletableFuture(笔记)