题目其实就是求一个数分解出来的质因数的和
为什么?
首先我们复制粘贴不管怎么操作,A->B操作之后,B一定是A的倍数,这就证明了这个题的数可以通过一串数字的乘积的形式来表达
假设这个数可以分解成(i-1)(j-1),由于(i-1)(j-1)>=1,化简得ij>=i+j,所以证明了如果能拆成乘积,一定要比和的形式更优。
那么为什么要是质因数的乘积呢?
当然是因为拆成质因数拆的更多,上面已经证明,拆的越多,结果越优,所以这个题只需要求分解后所有质因数的和就可以了
int res=0;
for(int i=2; n>1; i++){
while(n%i==0){
res+=i;
n/=i;
}
}
return res;
由于这里i是从小到大增加的,所以保证了i一定是质因数(合数一定有比它本身小的质因子在之前已经被除干净了)