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();
    }
};


你可能感兴趣的:(Leetcode,leetcode,算法,数论,质因数分解)