您的位置:首页 > 其它

UVA 10791 Minimum Sum LCM

2014-09-03 15:28 429 查看
唯一分解定理

把n分解为 n=a1^p1*a2^p2*...的形式,易得每个ai^pi作为一个单独的整数最优。

坑:

  n==1       ans=2;

  n因子种数只有一个 ans++;

  注意溢出。

#include <iostream>
#include <cstring>
using namespace std;

typedef long long ll;

ll ans=0;
ll n;
ll sign[100000];
ll pri[100000];
int tot;

void getpri (){
memset (sign,0,sizeof sign);
sign[0]=sign[1]=1;
for (int i=2;i*i<100000;i++)
if (!sign[i])
for (int j=i*i;j<100000;j+=i)
sign[j]=1;
tot=0;
for (int i=2;i<100000;i++)
if (!sign[i])
pri[tot++]=i;
}

ll solved (){
if (n==1)
return 2;
ll ans=0;
int flag=0;
for (int i=0;i<tot&&pri[i]*pri[i]<=n;i++){
ll temp=0;
if (n%pri[i]==0){
temp=1;
flag++;
while (n%pri[i]==0){
temp*=pri[i];
n/=pri[i];
}
}
ans+=temp;
}
if (n!=1){
flag++;
ans+=n;
}
if (flag<=1)
ans+=1;
return ans;
}

int main (){//int a=46341;cout<<a*a<<" "<<(1<<31)<<endl;
int kase=0;
getpri ();
while (cin>>n&&n){
ans=solved ();
cout<<"Case "<<++kase<<": "<<ans<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: