文章
150
粉丝
0
获赞
522
访问
22.2k
#include<bits/stdc++.h>
using namespace std;
// 计算 n! 中质数 p 的个数
int countInFactorial(int n, int p) {
int count = 0;
while(n) {
n /= p;
count += n;
}
return count;
}
int main() {
int n, a;
while(cin >> n >> a) {
int ans = 1e9; // 初始化为很大的数
// 对 a 进行质因数分解
for(int p = 2; p * p <= a; p++) {
if(a % p == 0) {
int expInA = 0; // p 在 a 中的指数
while(a % p == 0) {
expInA++;
a /= p;
}
// p 在 n! 中的个数除以在 a 中的指数
int countInN = countInFactorial(n, p);
ans = min(ans, countInN / expInA);
}
}
// 如果 a 还是大于 1,说明 a 本身是质数
if(a > 1) {
int countInN = countInFactorial(n, a);
ans = min(ans, countInN); // a 在 a 中的指数是 1
}
cout << ...
登录后发布评论
思路 求 n! 能被 a^k 整除的最大 k,即求 n! 中质因数 a 的个数。