[编程题]1=N
  • 热度指数:1792 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个正整数,令 :
你可以对整数执行以下操作(次数不限):
选择一个大于等于的整数。支付单位的成本,令
给定正整数,找出使所需的最小成本

输入描述:
输入的第一行包含一个正整数
{1 \leq N \leq 3\times 10^5 }


输出描述:
输出使所需的最小成本
示例1

输入

12

输出

7
核心思路:将 N 分解为质因数的乘积,最小成本就是所有质因数(包括重复的)之和
原因:a, b>=2 时,a+b<=a*b 恒成立,因此分解为质因数的成本最低。
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        scanner.close();

        System.out.println(minCost(N));
    }

    private static int minCost(int n) {
        if (n == 1) return 0;

        int cost = 0;

        // 分解质因数
        for (int i = 2; i * i <= n; i++) {
            // 计算质因数i的指数
            while (n % i == 0) {
                cost += i;  // 累加质因数作为成本
                n /= i;
            }
        }

        // 如果剩余的n是一个质数
        if (n > 1) {
            cost += n;
        }

        return cost;
    }
}



发表于 2025-09-06 17:49:13 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int n = in.nextInt();
        int cost = 0;
        for (int i = 2; n != 1; i++) {
            while (n != 1 && n % i == 0) {
                cost += i;
                n /= i;
            }
        }
        System.out.println(cost);
    }
}

发表于 2025-04-07 20:29:22 回复(0)