列表

详情


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

给你一个正整数 n

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

返回 n 可以取到的最小值。

 

示例 1:

输入:n = 15
输出:5
解释:最开始,n = 15 。
15 = 3 * 5 ,所以 n 替换为 3 + 5 = 8 。
8 = 2 * 2 * 2 ,所以 n 替换为 2 + 2 + 2 = 6 。
6 = 2 * 3 ,所以 n 替换为 2 + 3 = 5 。
5 是 n 可以取到的最小值。

示例 2:

输入:n = 3
输出:3
解释:最开始,n = 3 。
3 是 n 可以取到的最小值。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int smallestValue(int n) { } };

java 解法, 执行用时: 2 ms, 内存消耗: 38.5 MB, 提交时间: 2022-12-20 09:54:29

class Solution {
    public int smallestValue(int n) {
        int ans = 0, tmp = n;
        for (int i = 2; tmp > 1; i++) {
            while (tmp % i == 0) {
                tmp /= i;
                ans += i;
            }
        }
        return ans == n ? n : smallestValue(ans);
    }
}

golang 解法, 执行用时: 4 ms, 内存消耗: 1.8 MB, 提交时间: 2022-12-20 09:53:39

func smallestValue(n int) int {
	for {
		x, s := n, 0
		for i := 2; i*i <= x; i++ {
			for ; x%i == 0; x /= i {
				s += i
			}
		}
		if x > 1 {
			s += x
		}
		if s == n {
			return n
		}
		n = s
	}
}

python3 解法, 执行用时: 40 ms, 内存消耗: 14.9 MB, 提交时间: 2022-12-20 09:53:26

'''
不断循环,计算n的质因数之和s。如果s=n说明无法再继续减小n了,返回n;否则更新n为s,继续循环。
'''
class Solution:
    def smallestValue(self, n: int) -> int:
        while True:
            x, s, i = n, 0, 2
            while i * i <= x:
                while x % i == 0:
                    s += i
                    x //= i
                i += 1
            if x > 1: s += x
            if s == n: return n
            n = s

上一题