UVa 10791 Minimum Sum LCM(素因子分解)

题意:

求几个数的最小公倍数为n的最小和。

思路:

1. 同样的素因子都放在同一个数中

2. 不同的素因子都放在不同的数中

按照这样一个方法,题目就可以解决了。

#include <cstdio>
#include <cstring>
#include <cstring>
#include <cmath>

long long int solve(int num)
{
    int n = num;
    long long int ans = 0;
    int count = 0;

    for (int i = 2; i <= (int)sqrt(1.0*num); ++i)
    {
        if ((n % i) == 0)
        {
            int t = 1;
            while ((n % i) == 0)
                n /= i, t *= i;
       ++count; ans += t; } } if (n != 1 || count == 0) ans += n, ++count; if (count == 1) ++ans; return ans; } int main() { int n, count = 0; while (scanf("%d", &n) && n) { printf("Case %d: ", ++count); printf("%lld\n", solve(n)); } return 0; }
posted @ 2012-12-04 16:16  kedebug  阅读(231)  评论(0编辑  收藏  举报