UVa--10791 Minimum Sum LCM(math)

来源:互联网 发布:供应商管理数据流程图 编辑:程序博客网 时间:2024/05/16 15:17

UVa 10791

题解

算术基本定理的应用。
将n分解,n=pa11pa22...pakk,可知将每个pakk作为一个因子时最优。
注意当 n = 1和 n 为素数的时候,最小和为 n+1.

#include <bits/stdc++.h>using namespace std;int main(){    #ifdef LOCAL    freopen("data.in", "r", stdin);    #endif // LOCAL    int kcase = 1;    long long n;    while(cin >> n && n)    {        long long ans = 0;        vector<int> fac;        long long nn = n, m = (int)sqrt(n + 0.5);        for(int i = 2; i <= m; ++i)        {            long long  e = 1;            while(n % i == 0 && n > 1)            {                e *= i;                n /= i;            }            if(e != 1) fac.push_back(e);        }        if(n > 1) fac.push_back(n);        if(fac.size() == 1 || nn == 1) ans = nn + 1;        else{            for(size_t i = 0; i < fac.size(); ++i)                ans += fac[i];        }        printf("Case %d: %lld\n", kcase++, ans);    }    return 0;}
0 0