题解 | #整除问题#

整除问题

https://www.nowcoder.com/practice/8e29045de1c84d349b43fdb123ab586a

#include <algorithm>
#include <climits>
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
// 质因数分解
void decompose_prime(vector<int>& factor, int a)
{
    int i = 2;
    while(a != 1)
        {
            if(a % i == 0)
            {
                ++factor[i];
                a /= i;
            }
            else ++i;
        }
}

int main() {
    int n, a, ret, i, j, tmp;
    while (cin >> n >> a) 
    { 
        int size = 1000;
        // 保存每一项质因数的指数
        vector<int> factor_n(size, 0), factor_a(size, 0);
        // 分解a
        decompose_prime(factor_a, a);

        // 分解n!
        for(i = 2; i <= n; ++i)
        {
            // 分解阶乘的每一项
            decompose_prime(factor_n, i);
        }
        // 选最大的幂次
        i = INT_MAX;
        for(j = 2; j < size; ++j)
        {
            if(factor_a[j] == 0) continue;
            else
            {
                // k = factor_n[j]/factor_a[j]
                i = min(i, factor_n[j]/factor_a[j]);
            }
        }
        cout << i << endl;
    }
}

全部评论

相关推荐

10-31 14:54
已编辑
门头沟学院 算法工程师
点赞 评论 收藏
分享
10-11 17:45
门头沟学院 Java
走吗:别怕 我以前也是这么认为 虽然一面就挂 但是颇有收获!
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务