题目传送门:https://www.luogu.org/problemnew/show/P3927

题目大意:给你两个正整数n,k,求n!在k进制下末尾零的数量。

我们通过简单的数学分析,便可以发现,n!可以化为x*k^y(x,y∈N),而末尾零的数量,正是y。

经过进一步化简,$n! = x*\prod_{1}^{d(k)}d_{i}*y_{i}$,其中$d_{i}$为k的素因子,此处d(k)表示k的素因子个数,在已知d的情况下,求$y$并不复杂。

同时,我们也可以将k也化为这个格式,$k = *\prod_{1}^{d(k)}d_{i}*y'_{i}$。

通过进一步的归纳,我们发现:末尾零的数量为$min(\left \lfloor  y_{i}/y'_{i}    \right \rfloor)$。此题我们只需要求出$d_{i}$,随后求出$y_{i}$和$y‘_{i}$,最后简单计算即可得出答案。

考虑到$k≤10^{12}$,如果用常规的方法进行分解质因数求出所有$d_{i}$显然不行,于是我们用pollard_rho进行分解质因数即可。

如果你不知道什么是pollard_rho,传送门:http://blog.csdn.net/maxichu/article/details/45459533

时间复杂度为$O(k^{0.25}*log(n)*d(k))$

 #include<iostream>
#include<cstdio>
#include<cstring>
#define L long long
#include<algorithm>
#include<map>
using namespace std;
L gcd(L x,L y){return y==?x:gcd(y,x%y);}
L mul(L x,L y,L MOD){
L ans=;
while(y){
if(y&) ans=(ans+x)%MOD;
y=y>>; x=(x<<)%MOD;
}
return ans;
}
bool pow(L x,L y,L MOD){
L ans=;
while(y){
if(y&) ans=mul(ans,x,MOD);
y=y>>; x=mul(x,x,MOD);
}
return ans!=;
}
bool check(L n){
if(n==) return ; if(n<||n%==) return ;
int t=; while(t--) if(pow(+rand()%(n-),n-,n)) return ;
return ;
}
L pollard_rho(L n,L c){
L x=+rand()%(n-),y=x,k=;
for(int i=;;i++){
x=(mul(x,x,n)+c)%n;
L d=gcd((y-x+n)%n,n);
if(d>) return d;
if(x==y) return n;
if(i==k) y=x,k<<=;
}
}
map<L,int> m;
void find(L n,L c){
if(n==) return;
if(check(n)){m[n]++; return;}
L p=n; while(p>=n) p=pollard_rho(n,c--);
find(p,c); find(n/p,c);
}
L get(L n,L d){
L ans=;
while(n) ans+=n/d,n=n/d;
return ans;
} int main(){
L n,k,minn=1e18; cin>>n>>k; find(k,);
for(map<L,int>:: iterator it=m.begin();it!=m.end();it++){
L num=it->first,sum=it->second;
minn=min(minn,get(n,num)/sum);
}
cout<<minn<<endl;
}

【洛谷十月月测】 P3927 SAC E#1 - 一道中档题 Factorial的更多相关文章

  1. 【Luogu】P3927 SAC E#1 - 一道中档题 Factorial

    [题目]洛谷10月月赛R1 提高组 [题意]求n!在k进制下末尾0的个数,n<=1e18,k<=1e16. [题解]考虑10进制末尾0要考虑2和5,推广到k进制则将k分解质因数. 每个质因 ...

  2. 洛谷 P3927 SAC E#1 - 一道中档题 Factorial【数论//】

    题目描述 SOL君很喜欢阶乘.而SOL菌很喜欢研究进制. 这一天,SOL君跟SOL菌炫技,随口算出了n的阶乘. SOL菌表示不服,立刻就要算这个数在k进制表示下末尾0的个数. 但是SOL菌太菜了于是请 ...

  3. 洛谷-P3927 SAC E#1 - 一道中档题 Factorial

    原址 题目背景 数据已修改 SOL君(炉石主播)和SOL菌(完美信息教室讲师)是好朋友. 题目描述 SOL君很喜欢阶乘.而SOL菌很喜欢研究进制. 这一天,SOL君跟SOL菌炫技,随口算出了n的阶乘. ...

  4. [洛谷P3927]SAC E#1 - 一道中档题 Factorial

    题目大意:求$n!$在$k(k>1)$进制下末尾0的个数. 解题思路:一个数在十进制转k进制时,我们用短除法来做.容易发现,如果连续整除p个k,则末尾有p个0. 于是问题转化为$n!$能连续整除 ...

  5. SAC E#1 - 一道中档题 Factorial

    题目背景 SOL君(炉石主播)和SOL菌(完美信息教室讲师)是好朋友. 题目描述 SOL君很喜欢阶乘.而SOL菌很喜欢研究进制. 这一天,SOL君跟SOL菌炫技,随口算出了n的阶乘. SOL菌表示不服 ...

  6. noip模拟赛 SAC E#1 - 一道中档题 Factorial

    题目背景 数据已修改 SOL君(炉石主播)和SOL菌(完美信息教室讲师)是好朋友. 题目描述 SOL君很喜欢阶乘.而SOL菌很喜欢研究进制. 这一天,SOL君跟SOL菌炫技,随口算出了n的阶乘. SO ...

  7. [HNOI2009]双递增序列(洛谷P4728)+小烈送菜(内部训练题)——奇妙的dp

    博主学习本题的经过嘤嘤嘤: 7.22 : 听学长讲(一知半解)--自己推(推不出来)--网上看题解--以为自己会了(网上题解是错的)--发现错误以后又自己推(没推出来)--给学长发邮件--得到正确解法 ...

  8. 洛谷 P6776 - [NOI2020] 超现实树(找性质,神仙题)

    洛谷题面传送门 nb tea 一道! 首先考虑怎样入手分析这个看似非常不可做的问题.首先题目涉及高度无穷的树,根本枚举不了.不过我们冷静一下就会发现,如果我们记 \(mx=\max\limits_{i ...

  9. 【Luogu】P3930 SAC E#1 - 一道大水题 Knight

    [题目]洛谷10月月赛R1 提高组 [题意]给定n*n棋盘和<=16个棋子,给几个棋子种类和攻击范围,现我方只有一马,求能否吃王. [算法]状压+BFS [题解]16种棋子中,马不能吃马,直接处 ...

随机推荐

  1. css长度

    在CSS样式表中,长度单位分两种: 相对长度单位,如px, em等绝对长度单位,如pt,mm等 CSS相对长度单位(relative length unit) CSS相对长度单位中的相对二字,表明了其 ...

  2. 冒泡排序java语言实现

    class bubbleSort { public static void main(String[] args){ int[] a={49,38,65,97,76,13,27,49,78,34,12 ...

  3. Reverse string using recursion

    On-Site Question 3 - SOLUTION Question Given a string, write a function that uses recursion to rever ...

  4. 2018.07.27 bzoj3064: Tyvj 1518 CPU监控(线段树)

    传送门 线段树好题. 维护区间加,区间覆盖,区间最大,区间历史最大. 这个东西在国家集训队2016论文集之<区间最值操作与历史最值问题--杭州学军中学 吉如一>中讲的已经很详细了. 简单来 ...

  5. C#与android连接 SimpleWifi

    有时候 Read时会返回0长度 ----- 当连续2次每读到数据时,建议发个心跳信息,然后单片机给个回复 C# using System; using System.Collections.Gener ...

  6. [operator]Ubuntu server 18 设置静态IP

    root@ubuntu-MesosMaster-Marathon:~# cat /etc/netplan/-cloud-init.yaml # This file is generated from ...

  7. UVaLive 2531 The K-League (网络流)

    题意:有 n 个队伍进行比赛,每个队伍比赛数目是一样的,每场恰好一个胜一个负,给定每个队伍当前胜的场数败的数目,以及两个队伍剩下的比赛场数,问你冠军队伍可能是哪些队. 析:对每个队伍 i 进行判断是不 ...

  8. Spring MVC controller 被执行两次

    interceptor 被执行两次 后来发现 时controller被执行两次 后来发现是jsp页面有个: <img src="#" > 导致被执行两次. 解决方案:去 ...

  9. 网页程序 vs 桌面程序

    网页程序 vs 桌面程序 阅读:  评论:  作者:Rybby  日期:  来源:rybby.com 所谓的网页程序就是指以网页作为程序的操作界面,通过脚本语言“javascript”或其它客户端语言 ...

  10. delphi存取图片

    1.存图片到数据库 var   PicStream: TMemoryStream; if imgBugPic.Picture.Graphic <> nil then  begin    P ...