题目
给你一个正整数数组 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 <= 10^4
2 <= nums[i] <= 1000
解题
方法一:数学 分解质因数
思路
求乘积的不同质因数数量等于求所有乘数的质因数并去重得到的数量,具体来说:对所有数进行分解质因数并把质因数放入集合去重,集合大小便是不同质因数数量。
代码
class Solution {
Set<Integer> pfs = new HashSet<>();
public void pf(int n) {
for (int i = 2; i <= n / i; ++i) {
if (n % i == 0) {
while (n % i == 0) n /= i;
pfs.add(i);
}
}
if (n > 1) pfs.add(n);
}
public int distinctPrimeFactors(int[] nums) {
for (int x : nums) pf(x);
return pfs.size();
}
}
评论区