Leetcode.2521 数组乘积中的不同质因数数目

题目链接

Leetcode.2521 数组乘积中的不同质因数数目 Rating : 1413

题目描述

给你一个正整数数组 nums,对 nums所有元素求积之后,找出并返回乘积中 不同质因数 的数目。

注意:

  • 质数 是指大于 1 且仅能被 1 及自身整除的数字。
  • 如果 v a l 2 / v a l 1 val2 / val1 val2/val1 是一个整数,则整数 v a l 1 val1 val1 是另一个整数 v a l 2 val2 val2 的一个因数。
示例 1:

输入:nums = [2,4,3,7,10,6]
输出:4
解释:
nums 中所有元素的乘积是:2 * 4 * 3 * 7 * 10 * 6 = 10080 = 25 * 32 * 5 * 7 。
共有 4 个不同的质因数,所以返回 4 。

示例 2:

输入:nums = [2,4,8,16]
输出:1
解释:
nums 中所有元素的乘积是:2 * 4 * 8 * 16 = 1024 = 210 。
共有 1 个不同的质因数,所以返回 1 。

提示:
  • 1 < = n u m s . l e n g t h < = 1 0 4 1 <= nums.length <= 10^4 1<=nums.length<=104
  • 2 < = n u m s [ i ] < = 1000 2 <= nums[i] <= 1000 2<=nums[i]<=1000

解法:质因数分解

用一个哈希表 u s e t uset uset记录 分解的质因数。最后返回 u s e t uset uset 中的元素个数即可。

时间复杂度: O ( n l o g C ) O(nlogC) O(nlogC) C C C 就是 n u m s nums nums 中的每一个元素

C++代码:

class Solution {
public:
    int distinctPrimeFactors(vector<int>& nums) {
        unordered_set<int> uset;
        for(auto n:nums){
            for(int x = 2;x <= n / x;x++){
                while(n % x == 0){
                    n /= x;
                    uset.insert(x);
                }
            }
            if(n > 1) uset.insert(n);
        }

        return uset.size();
    }
};


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值