此题是最小公倍数的推理。
此题考虑的情况比较多,不要漏来。我就因为漏了一个情况就傻逼了。。。
可以这么想
如果这个数是素数本身那么就肯定是素数+1的答案
如果这个数是1那么输出答案肯定是2
如果这个数只有一个素数因子构成例如25=(5*5)那么肯定是(5*5+1)的最小和(因为要满足最小共倍数,如果只有一个素数因子那么就相当与它自己的数的各个组合相加是不变的)
如果这个数有躲过素数组成那么就是相同素数相乘不同素数相加例如(30=(5*6)=(2*3*5) 5+6>2+3+5 , 12=(2*2)+3)可以这么想因为同一个素数的因子是不能变的(因为LCM是求Pi^max(n1,n2),所以同一个素数因子是相乘的和。不同的素数因子就看成断点。然后就相加就可以了)
此处有个我分析不到位的地方:
题目说n<=(2^31-1)我想素数用int就可以存下来的。但是对于打素数表的时候第二层循环j=i*i 我不知到为什么我加了小于条件来还是会爆段错误。我本来觉得是可以过的。难道是编译的时候先算出来然后待到段地址了? 后来我全改成LONG LONG 才过的