返回介绍

solution / 2500-2599 / 2507.Smallest Value After Replacing With Sum of Prime Factors / README

发布于 2024-06-17 01:03:04 字数 2668 浏览 0 评论 0 收藏 0

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

English Version

题目描述

给你一个正整数 n

请你将 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 可以取到的最小值。

 

提示:

  • 2 <= n <= 105

解法

方法一:暴力模拟

根据题意,我们可以得到一个质因数分解的过程,即将一个数不断地分解为质因数,分解不能分解。过程中将每次分解的质因数相加,递归或者迭代地进行即可。

时间复杂度 $O(\sqrt{n})$。

class Solution:
  def smallestValue(self, n: int) -> int:
    while 1:
      t, s, i = n, 0, 2
      while i <= n // i:
        while n % i == 0:
          n //= i
          s += i
        i += 1
      if n > 1:
        s += n
      if s == t:
        return t
      n = s
class Solution {
  public int smallestValue(int n) {
    while (true) {
      int t = n, s = 0;
      for (int i = 2; i <= n / i; ++i) {
        while (n % i == 0) {
          s += i;
          n /= i;
        }
      }
      if (n > 1) {
        s += n;
      }
      if (s == t) {
        return s;
      }
      n = s;
    }
  }
}
class Solution {
public:
  int smallestValue(int n) {
    while (1) {
      int t = n, s = 0;
      for (int i = 2; i <= n / i; ++i) {
        while (n % i == 0) {
          s += i;
          n /= i;
        }
      }
      if (n > 1) s += n;
      if (s == t) return s;
      n = s;
    }
  }
};
func smallestValue(n int) int {
  for {
    t, s := n, 0
    for i := 2; i <= n/i; i++ {
      for n%i == 0 {
        s += i
        n /= i
      }
    }
    if n > 1 {
      s += n
    }
    if s == t {
      return s
    }
    n = s
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文