Minimum Sum LCM

题解

 

分析:

很容易想到唯一分解成质数乘积

 

易错:2,2或者2,4,8的LCM是2,8

所以其实当每个数都互质时才有最大意义,如8*3不能分解成4*6虽然这样更小,但是本来有两个2现在LCM就只有一个2了

 

#include<iostream>
#include<cstring>
#include<cstdio>
#include<iomanip>
#include<stdio.h>
using namespace std;
//typedef long long LL;
const int N = 1e6+10;
int cnt, prime[N];
bool vis[N];
void make_prime()
{
    cnt = 0;
    for(long long i = 2; i <= 100000; i++)
    {
        if(vis[i]) continue;
        prime[++cnt] = i;
        for(long long j = i*i; j <= 100000; j += i)
        {
            //cout << j<<endl;
            vis[j] = 1;
        }
    }
}
int main()
{
    //freopen("in.txt", "r", stdin);
    //freopen("out.txt", "w", stdout);
    make_prime();
    long long n;
    long long m;
    int t = 0;
    while(1)
    {
        t++;
        scanf("%lld", &n);
        if(n==0) break;
        m = n;
        long long ans = 0;
        long long num = 0;//记录有多少个因数
        for(int i = 1; i <= cnt; i++)
        {
            if(n % prime[i]==0) num++;
            long long tmp = 1;
            while(n % prime[i] == 0)
            {
                n /= prime[i];
                tmp *= prime[i];
            }
            if(tmp != 1) ans += tmp;
        }
        if(num <= 1) ans = m+1;
        printf("Case %d: %lld\n", t, ans);
    }
    return 0;
}
/*
12
10
5
0
*/
AC Code

 

posted @ 2021-03-11 09:02  bear_xin  阅读(19)  评论(0)    收藏  举报