UVA10791 最小公倍数的最小和 Minimum Sum LCM 题解
前言
长沙市一中8机房0714模拟测1。
传送门
blog
思路
本题思路,首先我们先看
若
将同一个质因子放在一个数中,这样就可以使得数最小。
for(ll i = 2;i <= sqrt(b);++i){
ll sum = 1;
while(b % i == 0){
sum *= i;
b /= i;
}
if(sum != 1)ans += sum;
}
这样就保证了每个质因数在同一个数中。
坑点
-
-
质数,值为
1,n 我们应该输出1 + n 。 -
质数的指数幂,值为
n,1 ,输出1 + n 。 -
输出
ans 。
AC Code
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll b;
int main(){
int cnt = 0;
while(1){
cnt++;
cin>>b;
if(b == 0)break;
if(b == 1){
cout<<"Case "<<cnt<<": "<<2<<endl;
continue;
}
ll ans = 0,can = 0;
for(ll i = 2;i <= sqrt(b);++i){
ll sum = 1;
while(b % i == 0){
sum *= i;
b /= i;
}
if(sum != 1)ans += sum,can++;
}
if(b > 1)ans += b,can++;
if(can < 2)cout<<"Case "<<cnt<<": "<<ans + 1;
else cout<<"Case "<<cnt<<": "<<ans;
cout<<endl;
}
return 0;
}