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

185 阅读1分钟

题目:
给你一个正整数数组 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
}