题目描述
LCM可以看成一组数的最小公倍数,即这些数公有的倍数。比如1 12的最小公倍数是12,3、4、5的最小公倍数为60。现如今给你一个正整数n,你必须发现一组数(这个组的大小必须大于1),使这一组数的LCM为n,同时使这一组数的和最小,并输出最小的和。比如如果给定n为12,1、12和3、4的LCM都为n,但是12+1>3+4所以最后的结果输出7。
输入描述
输入一个正整数n(2<=n<=10^9)
输出描述
按要求输出最小的和。
样例
输入
12
输出
7
#include<iostream>
#include<cmath>
using namespace std;
long long a[500000];
int main(){
long long n,cnt=0,sum=0,x;
cin>>n;
for(long long i=2;i<=n;i++){
if(n%i==0){
cnt++;
x=0;
while(n%i==0){
x++;
n/=i;
}
a[cnt]=pow(i,x);
}
}
if(cnt==1){
cnt++;
a[cnt]=1;
}
for(long long i=1;i<=cnt;i++){
sum+=a[i];
}
cout<<sum;
return 0;
}