先用几个例子来探究如何做题。
1 -> n = 0
2 -> copy, paste -> n = 2
3 -> copy, paste, paste -> n = 3
4 -> c p p p/ c p c p -> n = 4
5 -> c p p p p -> n = 5
6 -> c p c p p / c p p c p-> n = 5
8 -> c p c p c p -> n = 6
30 -> c p c p p c p p p p/ c p p p p c p c p p -> n = 10
容易发现,如果我们把一个数分解成 a * b * c...,那么最小的 copy/paste 次数就是 a + b + c + ...
怎么证明这一点呢?
首先我们证明 a + b + c... 次操作的确可以得到 a * b * c * ...
假设当前记事本中有 n 个数,那么我们对其进行一次 copy 和 (m - 1) 次 paste 之后,得到的就是 n + (m - 1) * n = m * n
因此通过 m 次操作,我们可以将原有的数变成 n * m。
最开始的时候 n = 1,因此通过 a + b + c... 次操作, n 就变成了 1 * a * b * c...
那么为什么质因数分解可以得到最小次数的操作呢?假设我们的分解方案中存在合数,因为 a * b >= a + b,将合数分解能降低或保持总和不变,因此分解为质因数就是最优方案。