SAC E#1 - 一道中档题 Factorial
2017-10-10 09:21
330 查看
https://www.luogu.org/problem/show?pid=3927
题目背景
数据已修改
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 (建议大家不要面向数据编程)
思路
质因数分解k,然后查找n!里的质数可以组成多少个k;代码实现
#include<cmath> #include<cstdio> #define LL long long using namespace std; const int maxn=1e6+10; inline LL min_(LL x,LL y){return x<y?x:y;} LL n,k,ans; LL s[maxn],ss; int main(){ scanf("%Illd%Illd",&n,&k),ans=n; LL a,b,c; for(LL i=2;i*i<=k;i++) for(LL j=0;;j++){ if(j==ss){ s[ss++]=i; if(k%i==0){ a=b=0,c=i; while(k%i==0){k/=i,b++;} while(n>=c){a+=n/c,c*=i;} ans=min_(ans,a/b); } break; } if(i%s[j]==0) break; } if(k!=1){ a=0,c=k; while(n>=c){a+=n/c,c*=k;} ans=min_(ans,a); } printf("%Illd\n",ans); return 0; }
相关文章推荐
- 洛谷 P3927 SAC E#1 - 一道中档题 Factorial
- 洛谷10月月赛R1·浴谷八连测R1·提高组 SAC E#1 -T1 一道中档题 Factorial
- 【P3927】SAC E#1 - 一道中档题 Factorial(luogu八连刷R1提高组)
- 洛谷10月月赛R1·浴谷八连测R1·提高组 SAC E#1 - 一道中档题 Factorial
- 洛谷10月月赛R1-T1-一道中档题 Factorial
- noip模拟赛 SAC E#1 - 一道中档题 Factorial
- 洛谷10月月赛R1T1-SAC E#1 - 一道中档题 Factorial(pollard-rho质因数分解)
- 【Luogu】P3927 SAC E#1 - 一道中档题 Factorial
- LuoguP3927 SAC E#1 - 一道中档题 Factorial
- [luogu3927] SAC E#1 - 一道中档题 Factorial
- 【luogu10月月赛】一道中档题 Factorial(数论)
- 洛谷P3927 SAC E#1 - 一道中档题 Factorial
- SAC E#1 - 一道中档题 Factorial
- 洛谷10月月赛R1·浴谷八连测R1·提高组 一道中档题 Factorial
- 【洛谷10月月赛R1提高组】 SAC E#1 - 一道中档题 Factorial
- P3927 SAC E#1 - 一道中档题 Factorial
- LuoguP3927 SAC E#1 - 一道中档题 Factorial 解题报告【唯一分解定理】
- UESTC 1692 这是一道比CCCC简单题更有想象力的中档题
- 【多重背包】CDOJ1691 这是一道比CCCC简单题经典的中档题
- 【动态规划】CDOJ1692 这是一道比CCCC简单题更有想象力的中档题