平时博主最爱进行的操作就是复制粘贴,能省力一点是一点不是嘛
今天我们就来讲讲怎么偷懒的题目,复制粘贴就完事啦!
题目
现有一字母A,给定一个小于1000的数n,要求只使用复制粘贴使得A的数目到达n,而且每次复制操作只能复制目前有的全部A,比如现在已经有6个A,必须复制6个A,不可以是2、3、4、5个。问最少需要执行几次操作可以达到目的
如n=3
A
1 复制 A
2 粘贴 AA
3 粘贴 AAA
答案为3
解答
只能复制全部,那就是如果想复制不是数目为1的A的话,那这个数目必须得是n的一个约数,所以如果n没有约数,即n为素数,那就每次粘贴一次到n就行了,即操作n次
没想到这么快就已经解决了问题的一半了,我可太聪明了。
那么接下来我们来解决不是素数的情况
我们取一个数来分析一下,比如说6,6=2*3,我们先来算一下分别复制粘贴到2和3,在到6,所经历的次数是否一样
先2再6
A
1 复制 A
2 粘贴 AA
3 复制 AA
4 粘贴 AAAA
5 粘贴 AAAAAA
答案为5
先3再6
A
1 复制 A
2 粘贴 AA
3 粘贴 AAA
4 复制 AAA
5 粘贴 AAAAAA
答案为5
我们发现先到2和先到3最后得出的结果是一样的。
而且得到的结果都是5,是2+3的结果
我们来分析一下,首先到一个素数n1需要的次数是n1次,因为n1*n2=n,所以需要粘贴的次数为n2-1次,然后还需要1次复制,所以最后需要的次数是n1+n2次,所以不管先到2还是先到3最后的结果是一样的撒
那肯定得有人问了,那像24这种234的,我为啥不能4*6呢
那不刚讲了6的吗,6他不得先到2或3吗,你搁着寻思个啥呢,是不是上课从来不认真听讲!
所以如果是素数的话,最后就是他所有的最小公约数的和。
啥?代码实现整不明白?
你从1到n循环,n能整除的累加一下不就好了?