题目传送门: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. [转载红鱼儿]Delphi实现微信开发(3)如何使用multipart/form-data格式上传文件

    开始前,先看下要实现的微信接口,上传多媒体文件,这个接口是用Form表单形式上传的文件.对我来说,对http的Form表单一知半解,还好,查到这个资料,如果你也和我一样,必须看看这篇文章. 在xali ...

  2. 633. Sum of Square Numbers

    static int wing=[]() { std::ios::sync_with_stdio(false); cin.tie(NULL); ; }(); class Solution { publ ...

  3. 2018.10.20 NOIP模拟 巧克力(trie树+dfs序+树状数组)

    传送门 好题啊. 考虑前面的32分,直接维护后缀trietrietrie树就行了. 如果#号不在字符串首? 只需要维护第一个#前面的字符串和最后一个#后面的字符串. 分开用两棵trie树并且维护第一棵 ...

  4. hdu-1209(细节题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1209 注意:1.时钟到12要变为0 2.注意比较角度相同的情况 #include<iostrea ...

  5. hdu-1394(线段树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 思路:建立一个空线段树,求出逆序数,(逆序数性质:交换两个相邻数,逆序数+1或-1, 交换两个不 ...

  6. hdu - 1072(dfs剪枝或bfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1072 思路:深搜每一个节点,并且进行剪枝,记录每一步上一次的s1,s2:如果之前走过的时间小于这一次, ...

  7. Win7 SP1 提示ADO的问题

    需要安装  Windows6.1-KB2640696-v3-x64.msu 这个Pack

  8. 几个CSS-content的小例子

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. IIS7 上传时出现'ASP 0104 : 80004005'错误

    这个错误本身说的是上传的文件的大小超过IIS所设置的默认值,一般为200KB,压缩文件是个下下之选,我还真这么干过.后来了解到通过更改IIS对上传文件的默认大小设置,来实现上传. 下面说一下具体步骤: ...

  10. Code First 更新数据库 记录

    每次都会忘记这个,所以记录一下 第一步:打开程序包管理控制台 第二步:启动迁移配置 第三步: 更新数据库的迁移的名称 因为设置了多个context,所以要指定更新的是哪一个库. 如果没有指定,会出现下 ...