题解 | 小红的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也就会有余数除不掉了。

全部评论

相关推荐

05-16 21:54
已编辑
门头沟学院 前端工程师
蓝曦111:我也是25届,这是第二次被裁了,毕业没到一年就失业两次,两次都是公司问题。第一家才转正一个月,跟我说公司拿不到项目结款没办法,赔了一个月;第二个公司连工资都发不出来了,赔偿更别想了,我算是认命了,这条路也不知道能走多远走多久,不过生活还是要继续的,走一步看一步吧
当你面对裁员会如何?
点赞 评论 收藏
分享
鲸鸿:实习协议不用管签多久,要走的时候提前三天说就可以了
点赞 评论 收藏
分享
评论
5
收藏
分享

创作者周榜

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