【洛谷】SAC E#1 Factorial
2024-08-27 19:47:30
别人可以眼杀我却研究了一个小时看了题解才懂的数学题
输入: n, k
输出: n!在k进制下后缀0的个数
n,k <= 10^12
将 n! 表示成 x×2y5z 的形式,其中 x mod 2 != 0,x mod 5 != 0,则答案为 min(y,z)。
所以只需要统计 n! 的质因数分解的结果中,2 和 5 的次数 即可。
由于数的乘法对应的是指数的加法,所以求出 [1,n] 中所有 数的质因数分解的结果中,2 和 5 的次数,再作和即可。
求一个数 x 中有多少个 p,可以在 O(logx) 时间内完成。
总时间复杂度 O(nlogn)。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll oo = 1e18;
const int N = 100010;
int an;
ll n, k, ans;
ll a[N], b[N], p[N];
template <typename T>
T read(){
T N(0), F(1);
char C = getchar();
for(; !isdigit(C); C = getchar()) if(C == '-') F = -1;
for(; isdigit(C); C = getchar()) N = N*10 + C-48;
return N*F;
}
int main(){
n = read<ll>(); k = read<ll>();
for(ll i = 2; i*i <= k; i++){
if(k % i == 0){
a[++an] = i;
while(k%i == 0){
p[an]++;
k /= i;
}
}
}
if(k > 1){
a[++an] = k;
p[an] = 1;
}
ans = oo;
for(int i = 1; i <= an; i++){
ll tmp = a[i];
while(tmp <= n){
b[i] += n / tmp;
tmp *= a[i];
}
ans = min(ans, b[i]/p[i]);
}
printf("%lld\n", ans);
return 0;
}
最新文章
- Secure Digital
- Objective-c 动画
- 文字的多列布局--column
- 魅族MX3\MX2 在MTP模式下恢复手机误删数据教程
- def文件格式
- 最长公共上升子序列(LICS) 模板
- [物理学与PDEs]书中的错误指出
- Autofac 之 基于 Castle DynamicProxy2 的 Interceptor 功能
- LeeCode-Pow(x, n)
- 串的模式匹配——Brute-Force算法
- 列举一些常见的Python HTTP服务器
- jQuery.reveal弹出层
- (转载,但不知道谁原创)获取SPRING 代理对象的真实实例,可以反射私有方法,便于测试
- 强大的jQGrid的傻瓜式使用方法。以及一些注意事项,备有相应的引入文件。
- 解决关于 vue项目中 点击按钮路由多了个问号
- 使用VSTS的Git进行版本控制(二)——提交保存工作
- 关于xampp中无法启动mysql,Attempting to start MySQL service...的解决办法!!
- luogu5019 [NOIp2018]铺设道路 (贪心)
- vue项目导入外部css样式和js文件
- HDU 2191 - 单调队列优化多重背包
热门文章
- Docker: 基础介绍 [一]
- Entity Framework入门教程(2)---EF工作流程
- deepin 下安装goland中文字体显示全是方块
- LCA(ST倍增)
- 第十节: EF的三种追踪实体状态变化方式(DBEntityEntry、ChangeTracker、Local)
- mvc 在弹出框中实现文件下载
- APPLE-SA-2019-3-25-1 iOS 12.2
- 获取reporting services导出pdf的url的方法
- python向ftp上传文件,解决中文问题
- ES进阶--02