zoukankan      html  css  js  c++  java
  • 【UVA10791】最小公倍数的最小和

    题意

    输入正整数n(1 ≤ n ≤ 231 − 1),找至少两个数,使得他们的LCM为n且要输出最小的和(看错题哭唧唧)

    分析

    唯一分解定理模板。

    首先要明确分解出来的两个数一定是互质的,如果不互质,肯定会有更优秀的,毕竟还可以约掉一个gcd,比如4和6不如3和4

    因此根据唯一分解定理 N=p1c1  *  p2c  *  p3c *……  pnc 

    只要乘起来刚好等于N,这些数其实就是pc,于是答案就是p1c1  +  p2c  +  p3c +……  pncn   

    代码

    1. #include<bits/stdc++.h>  
    2. using namespace std;  
    3. #define RT register   
    4. #define ll long long  
    5. ll k,cas,ans,num;  
    6. void divide(ll n)  
    7. {  
    8.     ans=0;num=0;  
    9.     ll m=(ll)sqrt((double)n + 10);  
    10.     for(RT ll i=2;i<=m;i++)  
    11.     {  
    12.         if(n%i==0)  
    13.         {  
    14.             int tmp=1;num++;  
    15.             while(n%i==0)  
    16.             {  
    17.                 tmp*=i;  
    18.                 n/=i;  
    19.             }  
    20.             ans+=tmp;  
    21.         }     
    22.     }  
    23.     if(num==0)ans=n+1;  
    24.     else if(num==1||n!=1)ans+=n;  
    25. }  
    26.   
    27. int main()  
    28. {  
    29.     while(scanf("%lld",&k)&&k)  
    30.     {  
    31.         divide(k);++cas;  
    32.         printf("Case %lld: %lld ",cas,ans);      
    33.     }  
    34. }     
  • 相关阅读:
    CloudStack tomcat集成方式分析
    cloudstack-setup-databases cs数据安装
    CloudStack 安装时需要的第三方包
    制作initramfs/initrd镜像
    GRUB使用说明
    Linux的kickstart安装详解
    cs4.1 编译与安装
    CS4.1 RPM打包函数分析
    Markdown 打出上下标
    matlab命令行双箭头消失
  • 原文地址:https://www.cnblogs.com/NSD-email0820/p/9859975.html
Copyright © 2011-2022 走看看