UVa 10791 Minimum Sum LCM
分析一波发现,将原数尽可能地分解成“质数的k次方”的和,会使得答案最大而数字和最小
于是就可以愉快地质因数分解了。
注意判断若n是质数,答案为n+1。
1 /**/ 2 #include<iostream> 3 #include<cstdio> 4 #include<cmath> 5 #include<cstring> 6 #include<algorithm> 7 using namespace std; 8 long long n; 9 long long calc(){ 10 if(n==1)return 2; 11 long long ans=0; 12 int i,j;int cnt=0; 13 int m=sqrt(n)+1; 14 for(i=2;i<=m;i++){ 15 if(n%i!=0)continue; 16 cnt++; 17 long long a=1; 18 while(n%i==0){ 19 n/=i; 20 a*=i; 21 } 22 ans+=a; 23 } 24 if(n!=1)ans+=n,cnt++; 25 if(cnt==1)ans++; 26 return ans; 27 } 28 int main(){ 29 int c=0; 30 while(scanf("%lld",&n) && n){ 31 printf("Case %d: %lld\n",++c,calc()); 32 } 33 return 0; 34 }
本文为博主原创文章,转载请注明出处。