题目
1114C
题意
求 b b b进制下的 n ! n! n!末尾有多少 0 0 0
分析
首先要知道对于十进制下 n ! n! n!有多少个末尾 0 0 0, 10 10 10能质因数分解为 10 = 2 ∗ 5 10 = 2 * 5 10=2∗5,那么末尾为 0 0 0就是看 1 ∼ n 1{\sim}n 1∼n分解后有多少个 2 和 5 2和5 2和5,又因为 2 2 2的个数大于 5 5 5的个数,所以最终的答案看的是 5 5 5的个数,计算5的贡献答案即为 n 5 + n 5 2 + n 5 2 … n 5 k {\frac{n}{5}}+{\frac{n}{5^2}}+{\frac{n}{5^2}}{\dots}{\frac{n}{5^k}} 5n+52n+52n…5kn.
通过以下函数计算
void f(int x,int y)
{
if(x < y) return 0;
else return x/y+(x/y,y);
}
现在考虑 b b b进制下的情况
代码
#include
using namespace std;
typedef long long ll;
const int N = 1600;
ll a,b;
ll c[N],m = 0,p[N];
void fj()
{
for(int i= 2;i<=sqrt(b);i++)
{
if(b % i== 0)
{
p[++m] = i,c[m] = 0;
while(b %i == 0) b/=i,c[m]++;
}
}
if(b > 1)
p[++m] = b,c[m] = 1;
}
ll cal(ll x,ll y)
{
if(x < y) return 0;
else return x/y+cal(x/y,y);
}
void solve()
{
ll minn=0x7fffffffffffffff;
fj();
for(int i= 1;i<=m;i++)
{
minn = min(minn,cal(a,p[i])/c[i]);
}
cout<>a>>b;
solve();
return 0 ;
}