题目链接:​​​https://codeforces.com/contest/1114/problem/C​​​ 题目意思就是
输入:输入两个数字n和b,问n转换成b进制后
输出:后面有多少个零
题目样例:
6 9 -->1
38 11 -->3
5 2 -->3
5 10 -->1
思路:先筛出b中的质因数和各质因数个数,然后求出阶乘里对应的各质因数个数,求出n中各质因数个数/b中各因数个数的最小值即为答案。
代码如下:

#include<bits/stdc++.h>
using namespace std;
long long int f(long long int n,long long int i)
{ //求质因数 i的个数
if(n<i) return 0;
return n/i+f(n/i,i);
}
int main(){
long long int n,b;
while(cin>>n>>b)
{
long long int sq=sqrt(b);
long long int ans=LLONG_MAX;
for(long long int i=2;i<=sq;i++)
{
if(b==1) break;
long long int num=0;
while(b%i==0)
{
b=b/i;
num++;
}
if(num!=0)
{
ans=min(ans,f(n,i)/num);
}
}
if(b>1) ans=min(ans,f(n,b));
cout<<ans<<endl;
}
return 0;
}