题解 | 小红的k次方

小红的k次方

https://www.nowcoder.com/practice/05e92542a6ac4d6fbda993996e63fbc0

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr); // IO加速,适配大数据量
    
    int n;
    cin >> n;
    int cnt2 = 0, cnt3 = 0, cnt5 = 0; // 统计2、3、5的质因子总个数
    vector<int> v(n);
    for (int i = 0; i < n; i++) {
        cin >> v[i];
        int num = v[i];
        // 分解质因子2,统计个数
        while (num % 2 == 0) {
            cnt2++;
            num /= 2;
        }
        // 分解质因子3,统计个数
        while (num % 3 == 0) {
            cnt3++;
            num /= 3;
        }
        // 分解质因子5,统计个数
        while (num % 5 == 0) {
            cnt5++;
            num /= 5;
        }
        // 其他质因子无需处理
    }
    // 答案为三个质因子个数的最小值
    int k = min({cnt2, cnt3, cnt5});
    cout << k << endl;
    return 0;
}
// 64 位输出请用 printf("%lld")

直接模拟会溢出,采用质因数分解的方法,对30取模就把30质因数分解成2,3,5,再看看每个数组中的元素包含多少个质因数,统计整个数组所包含的质因数个数,取这三种质因数的最小值,为什么是最小值呢?因为只有取最小才能保证含有k个2,3,5这样一定可以整除掉30,假设取最大则无法凑出多的30也就会有余数除不掉了。

全部评论

相关推荐

奔跑的suechil...:怎么评论区这么多打广告的 1.项目考虑是两个,可以加个项目 2.bg一般的话,不建议外卖加点评,99%都过不了简历 3.找项目要么是自己找github好点的开源,要么是评论区找广告去跟着,要么就是星球找项目了 加油友友
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

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