整除问题

整除问题

http://www.nowcoder.com/questionTerminal/8e29045de1c84d349b43fdb123ab586a

思路

首先暴力求出来 n 的阶乘肯定不行,那么我们可以把 a 给拆分成若干个质因子之积,然后看下 2 ~ n 中包含多少个对应的质因子,就能得出来最多可以整除 a 的多少次方。

比如 a 中有质因子 ,2 ~ n 中有对应的质因子 ... 个,那 k 的最大值也就是若干个 num 的最小值。

大致思路其实很简单,但是细节是需要注意的,比如 a = 2 * 2,有两个 2,我们不仅要统计质因数,还要统计质因数的个数。

#include<iostream>
#include<vector>

using namespace std;
//统计 num 中的质因子数
void getPrime(vector<int>& factors, int num){
    for(int i = 2; i*i <= num; i ++){
        while(num % i == 0){
            factors[i] ++;
            num /= i;
            if(num <= 1) return;
        }
    }
    if(num > 1) factors[num] ++;
}

int main(){
    int n, a;
    while(cin >> n >> a){
        vector<int> factor_a(1000), factor_n(1000);
        getPrime(factor_a, a);
        for(int i = 2; i <= n; i ++)
            getPrime(factor_n, i);
        int k = 1000;
        for(int i = 2; i <= a; i ++){
            if(factor_a[i]) k = min(k, factor_n[i]/factor_a[i]);
        }
        cout << k << endl;
    }
    return 0;
}
算法题解 文章被收录于专栏

不定期更新一些算法题解,有什么问题可以随时留言~

全部评论
nb
点赞 回复 分享
发布于 03-01 16:52 山东
为什么k的最大值是若干个num的最小值啊?
点赞 回复 分享
发布于 2024-02-22 11:16 河北
思路挺清晰的,对一个数的阶乘求质因子有了新的认知,学到了
点赞 回复 分享
发布于 2023-03-15 12:57 天津
为什么样例都过不了啊
点赞 回复 分享
发布于 2021-03-11 18:18
getPrime有点问题 最后要判断num是否>1
点赞 回复 分享
发布于 2021-03-06 15:14

相关推荐

05-20 13:59
门头沟学院 Java
米黑子米黑子:你这个成绩不争取下保研?
点赞 评论 收藏
分享
06-25 09:33
厦门大学 Java
程序员饺子:现在日常估计没啥hc了,等到八月多估计就慢慢有了。双九✌🏻不用焦虑的
投递快手等公司7个岗位
点赞 评论 收藏
分享
评论
32
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务