Leetcode 2507 (活用prime包第三弹)

2507. 使用质因数之和替换后可以取到的最小值
给你一个正整数 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 <= 10**5

题解:

# @param {Integer} n
# @return {Integer}
require "prime"
def smallest_value(n)
  h = Hash.new(0)
  while !(Prime.prime?(n))
    Prime.each(n) do |m|
      if n%m == 0
        n = n/m
        h[m] += 1
        if Prime.prime?(n)
          h[n] += 1
          n = h.keys.map {|k| h[k]*k}.sum
          h.clear
          if Prime.prime?(n)
            return n
          elsif n == 4
            return n
          end
        end
      end
    end
  end
  n
end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容