6266. 使用质因数之和替换后可以取到的最小值

114 阅读1分钟

题目:
给你一个正整数 n 。

请你将 n 的值替换为 n 的 质因数 之和,重复这一过程。

  • 注意,如果 n 能够被某个质因数多次整除,则在求和时,应当包含这个质因数同样次数。

返回 **n **可以取到的最小值。
算法:
方法一:模拟
思路:模拟即可,注意这里是求“n”可以取到的最小值,当n不再收敛时就应该返回结果,比如n = 4 = 2 * 2,质因数之和还是4,此时就直接返回了,而不是继续求。
另外就是求质因数的方法。

func smallestValue(n int) int {
    // 如果n是质数,直接返回
    nCopy := n
    // 不是质数,找到所有质因数,求和sum
    sum := 0
    for {
       prime, ok := findPrime(n) 
       if !ok {
           if sum == 0 {
                return prime    
           } else {
               sum = sum + prime
               break
           }
            
       } 
       sum = sum + prime
       n = n / prime
    } 
    // 边界条件n = 4
    if sum == nCopy {
        return sum
    }
    return smallestValue(sum)
}

// 找到质因数了吗,找到了就返回,没找到就返回自己
func findPrime(x int) (int, bool) {
    for i := 2; i * i <= x; i ++ {
        if x % i == 0 {
            return i, true
        }
    }
    return x, false
}