uva 10791 minimum sum lcm

来源:互联网 发布:手机语音骂人软件 编辑:程序博客网 时间:2024/06/06 06:59

1.将一个数分解成质因子,将相同的因子乘起来作为一个处理后的因子

2.将处理后得到的多个因子直接相加就是答案

3.因为题目说只要需要两个数字,所以对于1和素数我们需要小心。对于素数,我们只能分解出一个因子就它自己,对于1一个因子都分解不出来(我们不把1当做因子),他们的答案都是n+1,因为只有1和n的LCM是n 

//  Created by Chenhongwei in 2015.//  Copyright (c) 2015 Chenhongwei. All rights reserved.#include"iostream"#include"cstdio"#include"cstdlib"#include"cstring"#include"climits"#include"queue"#include"cmath"#include"map"#include"set"#include"stack"#include"vector"#include"sstream"#include"algorithm"using namespace std;typedef long long ll;int main(){//ios::sync_with_stdio(false);// freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);ll num;int Case=0;while(scanf("%lld",&num)&&num){Case++;printf("Case %d: ",Case);ll sum=0,cnt=0,n=num;ll m=(ll)sqrt(num+0.5);for(ll i=2;i<=m&&n!=1;i++)if(!(n%i)){cnt++;ll tmp=1;while(!(n%i)){tmp*=i;n=n/i;}sum+=tmp;// cout<<sum<<endl;}if(cnt==0||(cnt==1&&n==1))printf("%lld\n",num+1);else if(n!=1)printf("%lld\n",sum+n);else printf("%lld\n",sum);}return 0;}


0 0
原创粉丝点击