当前位置:网站首页>AcWing 2456. 记事本

AcWing 2456. 记事本

2022-07-06 08:59:00 Easenyang

题目描述
最初在一个记事本上只有一个字符 A
你每次可以对这个记事本进行两种操作:
Copy All (复制全部) :
你可以复制这个记事本中的所有字符(部分的复制是不允许的)。
Paste (粘贴) :
你可以粘贴你上一次复制的字符。 给定一个数字 n。
你需要使用最少的操作次数,在记事本中打印出恰好 n 个 A。
输出能够打印出 n 个 A 的最少操作次数。
输入格式
一个整数 n。
输出格式
一个整数,表示最少操作次数。
数据范围
1 ≤ n ≤ 1 0 6 1≤n≤10^6 1n106
题目链接记事本

思路:
  我们先考虑输入的数为质数 n 的情况:质数肯定是必须要先复制 1 次,然后粘贴 n - 1次。(例如 7 只能是复制 1 次,粘贴 6 次得到,大家可以在草稿本上推一次)
  那么对于合数的情况,我们就可以去分解质因数,然后不断粘贴得到。
举个例子:
  24 = 22 * 32。我们先去复制粘贴得到2,复制 1 次,粘贴 2 - 1次,得到 22 就又要复制 1 次,粘贴 2-1次,然后把22当成整体,复制 1 次,粘贴 3-1次,再复制 1 次,粘贴 2-1 次。共2x2+3x2 = 10次

代码:

import java.util.Scanner;
public class Main {
    
	public static void main(String[] args) {
    
		int n = new Scanner(System.in).nextInt();
		int res = 0;;
		for (int i = 2; i <= n; i++) {
    
			int s = 0;		//看当前质因数用到了几次
			while (n % i == 0) {
    
				s++;
				n /= i;
			}
			if (s > 0) {
    
				res += i * s;
			}
		}
		System.out.println(res);
	}
}

原网站

版权声明
本文为[Easenyang]所创,转载请带上原文链接,感谢
https://blog.csdn.net/Easenyang/article/details/125064538