返回介绍

solution / 2500-2599 / 2521.Distinct Prime Factors of Product of Array / README

发布于 2024-06-17 01:03:04 字数 3102 浏览 0 评论 0 收藏 0

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

English Version

题目描述

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

注意:

  • 质数 是指大于 1 且仅能被 1 及自身整除的数字。
  • 如果 val2 / val1 是一个整数,则整数 val1 是另一个整数 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 <= nums.length <= 104
  • 2 <= nums[i] <= 1000

解法

方法一:哈希表 + 质因数分解

对于数组中的每个元素,先对其进行质因数分解,然后将分解出的质因数加入哈希表中。最后返回哈希表的大小即可。

时间复杂度 $O(n\sqrt{m})$,其中 $n$ 和 $m$ 分别是数组的长度和数组中元素的最大值。

class Solution:
  def distinctPrimeFactors(self, nums: List[int]) -> int:
    s = set()
    for n in nums:
      i = 2
      while i <= n // i:
        if n % i == 0:
          s.add(i)
          while n % i == 0:
            n //= i
        i += 1
      if n > 1:
        s.add(n)
    return len(s)
class Solution {
  public int distinctPrimeFactors(int[] nums) {
    Set<Integer> s = new HashSet<>();
    for (int n : nums) {
      for (int i = 2; i <= n / i; ++i) {
        if (n % i == 0) {
          s.add(i);
          while (n % i == 0) {
            n /= i;
          }
        }
      }
      if (n > 1) {
        s.add(n);
      }
    }
    return s.size();
  }
}
class Solution {
public:
  int distinctPrimeFactors(vector<int>& nums) {
    unordered_set<int> s;
    for (int& n : nums) {
      for (int i = 2; i <= n / i; ++i) {
        if (n % i == 0) {
          s.insert(i);
          while (n % i == 0) {
            n /= i;
          }
        }
      }
      if (n > 1) {
        s.insert(n);
      }
    }
    return s.size();
  }
};
func distinctPrimeFactors(nums []int) int {
  s := map[int]bool{}
  for _, n := range nums {
    for i := 2; i <= n/i; i++ {
      if n%i == 0 {
        s[i] = true
        for n%i == 0 {
          n /= i
        }
      }
    }
    if n > 1 {
      s[n] = true
    }
  }
  return len(s)
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文