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

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


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

输入

12

输出

7
头像 BraveCoder
发表于 2025-09-06 17:49:58
核心思路:将 N 分解为质因数的乘积,最小成本就是所有质因数(包括重复的)之和。原因:当 a, b>=2 时,a+b<=a*b 恒成立,因此分解为(最小)质因数的成本最低。 import java.util.Scanner; public class Main { public 展开全文
头像 zhenghahahawda
发表于 2025-08-09 18:27:35
#include <cmath> #include <iostream> using namespace std; int main() { //选择最小的质因数,本质就是分解质因数 int n,ans=0;cin>>n; for(int 展开全文
头像 Xiettt
发表于 2026-02-20 14:20:11
#include<bits/stdc++.h> using namespace std; using ll=long long; using ull=unsigned long long; using i128=__int128_t; using u128=__uint128_t; u 展开全文
头像 我是芭芭拉的狗
发表于 2025-12-29 16:46:21
n = int(input()) a = [] i = 2 while i * i <= n: while n % i == 0: a.append(i) n //= i i += 1 if n > 1: a.append(n) s 展开全文
头像 niuke9999
发表于 2025-11-14 10:10:29
#include <stdio.h> int main(void) { int n; scanf("%d", &n); if(n == 1){ printf("0\n"); ret 展开全文
头像 丨阿伟丨
发表于 2025-08-28 11:21:00
题目链接 1=N 题目描述 给定一个正整数 。你可以对一个整数执行以下操作(不限次数):选择一个大于等于 2 的整数 ,支付 的成本,然后将当前的数变为原来的 。请问,将 变为 1 所需的最小总成本是多少? 解题思路 本题要求将数字 通过一系列除法操作变为 1,并最小化操作成本之和。每次操作选 展开全文
头像 甲醇苯酚钠
发表于 2026-01-25 21:47:07
#include <iostream> using namespace std; #include<vector> #include<cmath> //分解为质因数 质因数的和就是最小成本 bool Iszhishu(int a){ if(a<= 展开全文
头像 N_zip
发表于 2025-07-28 09:14:31
#include <iostream> using namespace std; //核心在于将 N 分解为若干个大于等于 2 的整数的乘积,使得这些整数的和(即总成本)最小。通过数学分析可知,将 N 分解为质因数的乘积时,总成本最小。这是因为质因数是不可再分的最小因数,进一步分解会导致 展开全文
头像 自由的风0450
发表于 2025-12-09 17:55:21
质因数分解 #include <iostream> #include<vector> using namespace std; int main() { int n; cin>>n; int res=0; for(int i=2; 展开全文
头像 牛客题解官
发表于 2026-03-12 15:22:23
1=N [题目链接](https://www.nowcoder.com/practice/31469f8503c24914acd5c0290ad4dfbb) 思路 先来理解题意。初始 ,每次操作可以选一个 ,花费 的代价把 变成 。目标是让 ,问最小总代价。 换句话说,我们要把 写成若干个 展开全文