您的位置:首页 > 其它

UVA 10791 - Minimum Sum LCM

2014-03-07 15:38 465 查看
分解素因子

题解这篇写的非常好:/article/6666229.html

#include <memory.h>
#include <cstdio>
#include <cmath>
using namespace std;
const int MAX = 1000001;
long long fac[100];
bool is_prime[MAX];
long long prime[100000], prime_idx;

void init_prime(){
memset(is_prime + 1, 1, sizeof(is_prime));
for(long long i = 2; i < MAX; ++i){
if(is_prime[i]){
prime[prime_idx++] = i;
for(long long j = i + i; j < MAX; j += i){
is_prime[j] = false;
}
}
}
}

int main(){
init_prime();
long long N, caseno = 1;
while(~scanf("%lld", &N)&& N){
long long f_idx = 0;
long long n = N;
long long ans = 0;
for(int i = 0; i < prime_idx && prime[i] < n; ++i){
if(n % prime[i] == 0){
fac[f_idx] = 1;
while(n % prime[i] == 0){
fac[f_idx] *= prime[i];
n /= prime[i];
}
ans += fac[f_idx++];
}
}
if(n > 1){
fac[f_idx] = n;
ans += fac[f_idx++];
}
printf("Case %lld: ", caseno++);
if(f_idx == 1 || N == 1)printf("%lld\n", 1 + N);
else printf("%lld\n", ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: