文章

150

粉丝

0

获赞

522

访问

22.2k

头像
整除问题 题解:经典的阶乘质因数分解问题
P1284 上海交通大学机试题
发布于2026年2月5日 21:03
阅读数 256

#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 << ...
登录查看完整内容


登录后发布评论

1 条评论
yauqq
2026年2月5日 21:03

思路 求 n! 能被 a^k 整除的最大 k,即求 n! 中质因数 a 的个数。

赞(1)
回复给: