zoukankan      html  css  js  c++  java
  • Minimum Sum LCM(uva 10791)

    题意(就是因为读错题意而wa了一次):给一个数字n,范围在[1,2^23-1],这个n是一系列数字的最小公倍数,这一系列数字的个数至少为2

    例如12,是1和12的最小公倍数,是3和4的最小公倍数,是1,2,3,4,6,12的最小公倍数,是12和12的最小公倍数………………

    那么找出一个序列,使他们的和最小,上面的例子中,他们的和分别为13,7,28,24……显然最小和为7

    /*
      我们很容易可以发现,将n唯一分解之后,把所有质因数乘以次数加起来就行了。比如:12=2^2*3^1,那么ans=2^2+3^1=7。这时会出现一个特殊例子,就是将n分解后只有一个质因数,如:5=5^1。这时的ans要加1。
    */
    #include<cstdio>
    #include<iostream>
    #include<cmath>
    using namespace std;
    int cnt;
    int main()
    {
        while(1)
        {
            ++cnt;
            int n,sum=0,tot=0;
            scanf("%d",&n);
            if(!n)break;
            for(int i=2;i<=sqrt(n);i++)
            {
                int p=0,p2=1;
                while(n%i==0&&n>1)
                {
                    n/=i;p++;p2*=i;
                }
                if(p)tot++,sum+=p2;
                if(n==1)break;
            }
            if(n>1)tot++,sum+=n;
            if(tot==1)sum++;
            printf("Case %lld: %lld
    ",cnt,sum);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    ThreadLocal
    volatile的理解
    二叉搜索树
    springboot中URL带有斜杠的转义字符%2F导致的400错误
    深入理解字符串
    Gradle安装与Idea配置
    基本数据类型和包装类
    Windows系统MongoDB安装
    Java程序是如何执行的?
    sshd服务器搭建管理和防止暴力破解
  • 原文地址:https://www.cnblogs.com/harden/p/5840277.html
Copyright © 2011-2022 走看看