CF1114C Trailing Loves (or L'oeufs?)
算法
- 数学(质因数分解,因数个数,进制)
思路
根据进制的知识,对于 进制而言,只有当 时, 进制意义下的第 位才会为零。 由于 ,所以直接进行除法操作肯定不行,考虑将 质因数分解,对于 的每一个质因数分别考虑。设 ,。则 在 进制下末尾 的个数为 。
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
long long divide[N][2];
int cnt = 0;
inline long long cal(long long a, long long b) {
if (a < b) return 0;
else return a / b + cal(a / b, b);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
long long n, k;
cin >> n >> k;
long long answer = 1ll << 62;
// ! 注意枚举上界为 sqrt(k) 而不是 k
for (long long i = 2; i * i <= k; i ++) {
if (k % i == 0) {
long long alpha = 0;
while (k % i == 0) {
k /= i;
alpha ++;
}
divide[++ cnt][0] = i;
divide[cnt][1] = alpha;
}
}
if (k > 1) {
divide[++ cnt][0] = k;
divide[cnt][1] = 1;
}
for (int i = 1; i <= cnt; i++) {
long long p = divide[i][0], alpha = divide[i][1], beta = cal(n, p);
answer = min(answer, beta / alpha);
}
cout << answer << '\n';
return 0;
}