首页 > 其他分享 >Leetcode 2507. 使用质因数之和替换后可以取到的最小值 优化前 优化后

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

时间:2023-12-21 19:55:53浏览次数:30  
标签:int sum 取到 最小值 2507 质因数 优化 替换

https://leetcode.cn/problems/smallest-value-after-replacing-with-sum-of-prime-factors/description/

给你一个正整数 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

分解质因数的模版题

class Solution {
public:
    int primes[100010][2];
    int idx = 0;

    void splitPrime(int n) {
        memset(primes, 0, sizeof primes);
        idx = 0;
        bool vis[100010]; memset(vis, 0, sizeof vis);
        int cp = n;
        //每个数标记一次 复杂度O(n)
        for (int i = 2; i <= n ; i++) {
            if (vis[i] == 1) continue;
            while (cp % i == 0) {
                cp /= i;
                primes[idx][0] = i;
                primes[idx][1]++;
            }
            if (primes[idx][1] > 0) idx++;
            for (int j = i + i; j <= n; j += i) {
                vis[j] = 1;
            }
        }
    }

    int smallestValue(int n) {
        while (1) {
            //循环分解质因数 然后使用数组记录 获取所有质因数之和
            int sum = 0;
            splitPrime(n);
            for (int i = 0; i < idx; i++) {
                sum += primes[i][1]*primes[i][0];
            }
            if (sum == n) break;
            n = sum;
        }
        return n;
    }
};

但是这样太过冗余 最后优化到 复杂度O(sqrt(n))

class Solution {
public:
    int smallestValue(int n) {
        int pre = 0;
        while (pre != n) {
            pre = n; int sum = 0;
            for (int i = 2; i <= n / i; i++) {
                //只需要遍历到 sqrt(n)即可
                while (n % i == 0) {
                    //第一次能整除n的数 一定是质数 比如2循环从n中整除后
                    // 4 6 8 10 就不可能整除没有2因子的n 了
                    n = n / i;
                    sum += i;
                }
            }
            //最后n可能变成1 可能变成一个没有之前因子的一个质数
            //如果是质数 则也要加入质数和变量中
            if (n > 1) sum += n;
            n = sum;
        }
        return n;
    }
};

我的视频题解空间

标签:int,sum,取到,最小值,2507,质因数,优化,替换
From: https://www.cnblogs.com/itdef/p/17919985.html

相关文章

  • Redis“垃圾”过期死键管理与优化
    【作者】付磊Redis死键的定义不尽相同,通常有两种:写到Redis里后,由于过期时间过长或者压根没有过期时间,加之长期不访问,这类key可以被称为死键。明明已经过了过期时间,但还占用Redis内存(没有真的删除),这类key也可以被称为死键。注:本文讨论第二种情况一、两个例子下面两个列子中的键值均......
  • 工程监测仪器振弦采集仪的性能评估与优化
    工程监测仪器振弦采集仪的性能评估与优化工程监测仪器振弦采集仪的性能评估与优化涉及以下几个方面: 1.采样率与精度:振弦采集仪需要具备足够高的采样率和精度,以确保对振动信号进行准确和全面的采集。采样率过低或精度不足可能导致信号失真或遗漏,影响监测结果的准确性。因此,对......
  • class083 动态规划中用观察优化枚举的技巧-下【算法】
    class083动态规划中用观察优化枚举的技巧-下【算法】算法讲解083【必备】动态规划中用观察优化枚举的技巧-下code11235.规划兼职工作//规划兼职工作//你打算利用空闲时间来做兼职工作赚些零花钱,这里有n份兼职工作//每份工作预计从startTime[i]开始、endTime[i]结束,报酬为pr......
  • 神经网络优化篇:详解dropout 正则化(Dropout Regularization)
    dropout正则化除了\(L2\)正则化,还有一个非常实用的正则化方法——“Dropout(随机失活)”。假设在训练上图这样的神经网络,它存在过拟合,这就是dropout所要处理的,复制这个神经网络,dropout会遍历网络的每一层,并设置消除神经网络中节点的概率。假设网络中的每一层,每个节点都以抛硬币......
  • 金牌导航-数据结构优化DP
    数据结构优化DP例题A题解设\(f_{i,j}\)表示以第\(i\)位为结尾,长度为\(j\)的严格单调上升子序列的数量。那么显然有\(f_{i,j}=\sum_{k=1}^{i-1}f_{k,j-1}\times(a_k<a_i)\)然后发现这玩应\(O(n^2m)\)直接寄掉了。考虑优化。发现只有当\(a_k<a_i\)时才会有贡献。......
  • 深度探索Android ANR:监控、排查、优化全攻略
    背景问题1.什么是ANR?ANR是Android系统中的一种错误状态,全称为ApplicationNotResponding,中文翻译为“应用无响应”。当Android系统检测到应用程序在一段时间内未能响应用户输入或无法执行主要的UI线程操作时,就会触发ANR错误。ANR是一种系统保护机制,旨在确保应用的响应性,防止用户......
  • Android 开发者一定要吃透的“性能优化”,你学会了吗?
    前言随着时代的发展,Android开发行业也在不断的完善,其中也出现了许多的开源框架,但大部分移动开发者基本上已经习惯了对其成熟的API(应用程序编程接口)进行调用,以此来完成所需的开发要求,随着多次的项目需求被其完美解决,众多的开发者也随之膨胀了起来。但在一次又一次的大厂面试中......
  • 通过反汇编理解GCC优化以及inline函数的功能
    在linux环境写下以下C代码:首先不加优化选项去编译:gcc-ginline_func_test.c-oinline_func_test之后用objdump-S反汇编可见:可见,即使f1是inline函数,还是和f2一样被调用了六次。之后加入优化选项去编译gcc-O1-ginline_func_test.c-oinline_func_test这一次,f2依然被......
  • Ubuntu安装后的优化
    Ubuntu安装后的优化此教程适用与ubuntu2223版本部分软件会有问题1、安装缺失的字体可以从windows中复制字体到ubuntu中,但是ubuntu只能识别.ttf格式的字体,因此需要修改windows下复制过来的字体后缀,让ubuntu能够识别。#复制字体到/usr/share/fonts目录sudocp~/Downloads/......
  • 神经网络优化篇:为什么正则化有利于预防过拟合呢?(Why regularization reduces overfitti
    为什么正则化有利于预防过拟合呢?通过两个例子来直观体会一下。左图是高偏差,右图是高方差,中间是JustRight。现在来看下这个庞大的深度拟合神经网络。知道这张图不够大,深度也不够,但可以想象这是一个过拟合的神经网络。这是的代价函数\(J\),含有参数\(W\),\(b\)。添加正则项,它可......