最小倍数的最小和(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;
}
唯一分解定理的用武之地!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;
}
相关文章推荐
- UVA10717 - Mint(欧几里德求最小共倍数)
- 例题10-4 UVA 10791 Minimum Sum LCM (最小公倍数的最小和)
- LCM的最小和(uva 10791)
- Uva 10791 最小公倍数的最小和 唯一分解定理
- UVa 10791 最小公倍数的最小和(唯一分解定理)
- uva 10791 和最小的LCM
- uva 10791 最小公倍数的最小和
- 筛法求素数,唯一分解定理(最小公倍数的最小和,uva 10791)
- UVA 10791 最小公倍数的最小和
- UVa 10791 和最小的LCM (质因数分解)
- uva 10791 (gcd,lcm,最小和表示法,单个质因子总和得凑起来)
- UVA 11183 Teen Girl Squad(最小树形图)
- UVa 10480 Sabotage ( 最小割最大流定理)
- uva 10369 - Arctic Network(最小生成树)
- Uva 11506 Angry Programmer ( 最小割最大流,拆点,建图)
- 【最小生成树】UVA_12507
- UVALive 5099 Nubulsa Expo 全局最小割 非网络流 n^3
- UVA 10791
- 【最小割】 UVA 11248 Frequency Hopping
- uva 10791【 Minimum Sum LCM】