博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Luogu P3927 SAC E#1 - 一道中档题 Factorial
阅读量:5052 次
发布时间:2019-06-12

本文共 2212 字,大约阅读时间需要 7 分钟。

题目背景

数据已修改

SOL君(炉石主播)和SOL菌(完美信息教室讲师)是好朋友。

题目描述

SOL君很喜欢阶乘。而SOL菌很喜欢研究进制。

这一天,SOL君跟SOL菌炫技,随口算出了n的阶乘。

SOL菌表示不服,立刻就要算这个数在k进制表示下末尾0的个数。

但是SOL菌太菜了于是请你帮忙。

输入输出格式

输入格式:

 

每组输入仅包含一行:两个整数n,k。

 

输出格式:

 

输出一个整数:n!在k进制下后缀0的个数。

 

输入输出样例

输入样例#1:
10 40
输出样例#1:
2

说明

对于20%的数据,n <= 1000000, k = 10

对于另外20%的数据,n <= 20, k <= 36

对于100%的数据,n <= 10^12,k <= 10^12

update

1.一组数据

2.K不会==1

3.现在std没有爆long long

4.对数据有问题联系icy (建议大家不要面向数据编程)

 

搞了好久终于AC了

 

1 //2018-06-06 17:19:52 2 #include 
3 #include
4 #include
5 #include
6 #include
7 #include
8 using namespace std; 9 10 const long long N = 900001;11 12 long long n, k, base;13 long long a[N], b[N];14 15 long long head;16 void Decom(long long x){17 for(long long i=2; i<=x; i++){18 if(x % i == 0) a[++head] = i, b[head] = 0;19 while(x % i == 0){20 b[head]++;21 x /= i;22 }23 }24 }25 26 long long f(long long x){27 long long tmp = 0;28 while(x >= base){29 tmp += x/base;30 x /= base;31 }32 return tmp;33 }34 35 long long ans = 999999999999999999;36 int main(){37 scanf("%lld%lld", &n, &k);38 Decom(k);39 long long cnt = 9999999999;40 for(long long i=1; i<=head; i++){41 base = a[i], cnt = b[i];42 ans = min(ans, f(n)/cnt);43 }44 45 46 printf("%lld\n", ans); 47 48 return 0;49 }

 

更新之后更快

//2018-06-06 17:19:52#include 
#include
#include
#include
#include
#include
using namespace std;const long long N = 900001;long long n, k, base;long long a[N], b[N];long long head;void Decom(long long x){ for(long long i=2; i*i<=x; i++){ //改成i<=sqrt(x); if(x % i == 0) a[++head] = i, b[head] = 0; while(x % i == 0){ b[head]++; x /= i; } } if(x > 1) a[++head] = x, b[head] = 1; //加上这一行 }long long f(long long x){ long long tmp = 0; while(x >= base){ tmp += x/base; x /= base; } return tmp;}long long ans = 999999999999999999;int main(){ scanf("%lld%lld", &n, &k); Decom(k); long long cnt = 9999999999; for(long long i=1; i<=head; i++){ base = a[i], cnt = b[i]; ans = min(ans, f(n)/cnt); } printf("%lld\n", ans); return 0;}

 

转载于:https://www.cnblogs.com/sineagle/p/9146957.html

你可能感兴趣的文章
(转)面向对象最核心的机制——动态绑定(多态)
查看>>
token简单的使用流程。
查看>>
django创建项目流程
查看>>
Vue 框架-01- 入门篇 图文教程
查看>>
多变量微积分笔记24——空间线积分
查看>>
poi操作oracle数据库导出excel文件
查看>>
(转)Intent的基本使用方法总结
查看>>
Windows Phone开发(24):启动器与选择器之发送短信
查看>>
JS截取字符串常用方法
查看>>
Google非官方的Text To Speech和Speech Recognition的API
查看>>
stdext - A C++ STL Extensions Libary
查看>>
Django 内建 中间件组件
查看>>
bootstrap-Table服务端分页,获取到的数据怎么再页面的表格里显示
查看>>
进程间通信系列 之 socket套接字及其实例
查看>>
天气预报插件
查看>>
Unity 游戏框架搭建 (十三) 无需继承的单例的模板
查看>>
模块与包
查看>>
mysql忘记root密码
查看>>
apache服务器中设置目录不可访问
查看>>
嵌入式Linux驱动学习之路(十)字符设备驱动-my_led
查看>>