您的位置:首页 > 其它

最小倍数的最小和(Uva 10791)

2018-03-15 22:24 274 查看
题意:求至少两个正整数,它们的最小公倍数为n,求这些整数的和最小值……
唯一分解定理的用武之地!n=a1^p1*a2^p2……*an^pn,当两两互质的时候,即ai^pi单独出现的时候最优。数据范围很大,注意避免溢出QAQ#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,k=0;
while(scanf("%d",&n)==1&&n)
{
if(n==1)
printf("Case %d: 2\n",++k);
else
{
int m=(int)sqrt(n+0.5);
int j=0;
long long cnt=0;
for(int i=2;i<=m;i++)
{
if(n%i==0)
{
j++;
int ans=1;
while(n%i==0)
{
ans*=i;
n/=i;
}
cnt+=ans;
}
}
if(j==0)
cnt=(long long)n+1;
else if(j==1||n>1)
cnt+=n;
printf("Case %d: %lld\n",++k,cnt);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: