您的位置:首页 > 其它

Minimum Sum LCM UVA - 10791 思维题

2018-03-06 16:44 435 查看
题意为 给你一个数N,让你求出若干个数使得这若干个数的最小公倍数为N,并且这若干个数的和最小。
例如N=12时,这若干个数则为3,4.和为7
       N= 10时,这若干个数为2,5.和为7
参照了其他大佬的解法
将n分解成n = p1 ^ k1 * p2 ^ k2 * ... * pm ^ km,然后求解sum = ∑(1≤i≤m)pi ^ ki.此时sum即我们需要的答案,虽然我也不知道为什么这样就对了。比较费解的是n本身就是素数,那么n应该分解成n^ 1 * 1 ^ 1,所以sum= n + 1,还有一种就是n = p ^ k,sum = p ^ k + 1.这两个特殊情况要注意处理到。下面为代码:#include<bits/stdc++.h>
using namespace std;
long long f(long long n)
{
long long ans=0,nn=n;
double b=sqrt(n);
int flag=0;
for(long long i=2;i<=b&&n>1;i++)
{
long long x=0;
if(n%i==0)
{
flag++;
x=1;
while(n%i==0)
{
x*=i;
n/=i;
}
}
ans+=x;
}
if(flag<=1)
return nn+1;
else
{
if(n>1)
ans+=n;
return ans;
}
}
int main()
{
long long n;int u=1;
while(scanf("%lld",&n)&&n)
{
printf("Case %d: %lld\n",u++,f(n));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息