题目描述

输入

第一行有一个正整数T,表示测试数据的组数。

接下来的T行,每行输入两个十进制整数n和base。

输出

对于每组数据,输出一个十进制整数,表示在base进制下,n!结尾的零的个数。

样例输入

2

10 10

10 2

样例输出

2

8

数据范围

对于20%的数据,n<=20,base<=16

对于50%的数据,n<=10^9,base<=10^5

对于100%的数据,1<=T<=50,0<=n<=10^18,2<=base<=10^12

解法

题意转化为:令n!=basei∗k,则i为答案;

同时称i为base在n!中的贡献

直接想法是把base分解质因数为a1k1∗a2k2∗...∗amkm;

然后检查每个质因数ai在n!中的贡献 cnt,于是就可以得出这个质因数最多容纳cnt/ki个base。

把所有容纳能力取个最小值即为答案。


问题在于我们在求ai在n!中的贡献时,可能需要O(nlogn)的时间:

枚举j属于[1..n],易得ai在j中的贡献,累计所有贡献即为ai在n!中的贡献

如果采用上述办法,时间会超限。


给n一直除素数,并将每一次的商加起来,即为答案。

时间复杂度为O(logn);

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define ll long long
#define sqr(x) ((x)*(x))
#define ln(x,y) int(log(x)/log(y))
using namespace std;
const char* fin="ex3566.in";
const char* fout="ex3566.out";
const int inf=0x7fffffff;
const int maxn=100007;
ll n,m,limit,tmp,tmd,tmb,ans;
ll t,i,j,k;
ll yue[maxn],cnt[maxn];
int main(){
scanf("%d",&t);
for (;t;t--){
scanf("%lld%lld",&n,&m);
limit=(ll)sqrt(m);
tmp=m;
yue[0]=0;
for (i=2;i<=limit;i++){
if (tmp==1) break ;
if (tmp%i==0){
yue[++yue[0]]=i;
cnt[yue[0]]=0;
while (tmp%i==0){
cnt[yue[0]]++;
tmp/=i;
}
}
}
if (tmp>1) yue[++yue[0]]=tmp,cnt[yue[0]]=1;
ans=0;
for (i=1;i<=yue[0];i++) {
//ll num=(n/yue[i]),fi=1,la=fi+num-1;
tmd=0;
/*for (j=yue[i];j<=n;j+=yue[i]) {
k=j;
while (k%yue[i]==0) k/=yue[i],tmd++;
}*/
k=n;
while (k) k/=yue[i],tmd+=k;
if (ans) ans=min(ans,tmd/cnt[i]);
else ans=tmd/cnt[i];
/*if (ans) ans=min(ans,(fi+la)*num/2/cnt[i]);
else ans=(fi+la)*num/2/cnt[i];*/
}
printf("%lld\n",ans);
}
return 0;
}

启发

考虑把所有数一起处理,可以节省时间。

最新文章

  1. MongoDB 由于目标计算机积极拒绝,无法连接 2014-07-25T11:00:48.634+0800 warning: Failed to connect to 127.0.0.1:27017, reason: errno:10061
  2. 数据结构作业——ギリギリ eye(贪心+优先队列/贪心+并查集)
  3. target与currentTarget区别 ( html是弹窗居中的例子)
  4. 关于favicon.ico的使用
  5. RegisterStartupScript和RegisterClientScriptBlock的用法
  6. linux kernel with param
  7. UIKit和Core Graphics绘图(三)——绘制虚线,椭圆以及饼图
  8. 防止自己的网站被别人frame引用造成钓鱼
  9. AngularJS 3
  10. Centos定时任务
  11. 第二篇:数据可视化 - 基本API
  12. Java提高篇(二):IO字节流、字符流和处理流
  13. oracle本月、上月、去年
  14. 使用springBoot搭建REATFul风格的web demo
  15. Java基础知识陷阱(二)
  16. selenide 自动化测试进阶一: 查找元素和相关操作
  17. WSAAsyncSelect 消息模型
  18. FinalShell Mac OS版,Linux版安装及教程
  19. java基础 静态 static 问在多态中,子类静态方法覆盖父类静态方法时,父类引用调用的是哪个方法?
  20. 移动端h5页面meta标签设置

热门文章

  1. LUOGU P3157 [CQOI2011]动态逆序对(CDQ 分治)
  2. VS未能加载文件或程序集“xxx.dll” 设置Build Events
  3. Junit5的依赖添加及RunWith(SpringJUnit4ClassRunner.class)注解使用
  4. 卸载VS2015之后,安装VS2017出错
  5. Luogu P2680 运输计划(二分+树上差分)
  6. 如何修改MyEclipse的SVN账户和密码
  7. bzoj 4004 [JLOI2015]装备购买——拟阵证明贪心+线性基
  8. 完美解决IE8不支持margin auto问题
  9. jQuery事件绑定的四种方法
  10. JavaScript也是黑客技术?