题目:
给你一个正整数数组 nums ,对 nums 所有元素求积之后,找出并返回乘积中 不同质因数 的数目。
注意:
- 质数 是指大于
1且仅能被1及自身整除的数字。 - 如果
val2 / val1是一个整数,则整数val1是另一个整数val2的一个因数。
算法:
func distinctPrimeFactors(nums []int) int {
count := 0
// 保存一个数字是否出现过,以及是否是prime
primeMap := make(map[int]bool)
for i := range nums {
// 如果出现过,不管是不是prime都不用管了
// 这个数字第一次出现
if _, ok := primeMap[nums[i]]; !ok {
num := nums[i]
for {
p := getPrime(num)
if p == -1 {
primeMap[num] = true
break
} else {
primeMap[p] = true
}
num = num / p
}
}
}
// fmt.Println(primeMap)
for _, isPrime := range primeMap {
if isPrime {
count ++
}
}
return count
}
// 是质数则返回-1,否则返回其中一个因数
func getPrime(n int) int {
for i := 2; i * i <= n; i ++ {
if n % i == 0 {
return i
}
}
return -1
}