原题

题目大意

输入整数\(n(1\le n<2^{31})\) ,求至少两个正整数,是它们的最小公倍数为$ n$,且这些整数的和最小。输出最小的和。

有多组测试输入,以\(0\)结束。

题解

首先,我们把问题简化:输入正整数\(n\),求几个正整数(可以是一个),是它们的最小公倍数为\(n\),且这些整数的和最小。输出最小的和。

我们考虑\(n\)是素数时,不难证明只有一个数\(n\),那么如果要求至少要分解成两个,那么只能在加一个\(1\)。

当\(n\)是合数时。如果\(n\)能被分解为两个大于\(1\)的互质整数的积\(a_1,a_2\),由于\((a_1,a_2)=1\),如\([a_1,a_2]=a_1\times a_2\),又由于\(a_1>1,a_2>1\),那么\(a_1+a_2<a_1\times a_2\),所以我们要把它分解开来。这样,我们就把问题转成了上面简化问题中\(n=a_1,n=a_2\)的子问题。如此递归下去,我们发现:设\(n\)的标准分解式为\(n=p_{1}^{a_1}p_{2}^{a_2}\cdots p_x^{a_x}\),当所有数分别为\(p_{x_0}^{a_{x_0}}\)时最小。

此外,我们还要特判一下开始\(n=p^a\)的情况。此时\(n\)无法继续分解,则\(ans=n+1\)。最后,记得当\(n=1\)时,\(ans=2\)。

然后我们来看实现问题。

从\(1\)枚举到\(n\)?TLE。

是否记得判断一个数是素数的时候(在学会Miller-Rabin之前)我们通常是从\(1\)枚举到\(\sqrt{n}\),这题可以吗?

我们发现对于任意正整数\(n\),在超过\(\sqrt{n}\)且不等于\(n\)的数中,最多只有一个。如果有两个,那么它们的乘积就已经超过\(n\)了。那么我们就只要枚举\(\sqrt{n}\)个数即可。

代码

#include <cstdio>

typedef long long LL;

int nn;

inline void sol(LL n)
{
int f=0;
LL ans=0;
if(n==1)//对1的特判
{
printf("Case %d: 2\n",++nn);
return;
}
LL ttt,tn=n;
for(LL i=2; i*i<=n; ++i)//计算标准分解式,枚举到sqrt即可
{
ttt=1;
if(!(n%i) && (n!=1))
{
do
{
ttt*=i;
n/=i;
}
while(!(n%i) && (n!=1));
f++,ans+=ttt;
}
if(n==1) break;
}
if(tn==n || f==1) ans++;
//tn==n:n是素数,f==1:n不是素数但除1与n外的因子只有一个
if(n!=1) ans+=n;//在sqrt(n)以上除n外还有一个n的因子
printf("Case %d: %lld\n", ++nn, ans);
//最后一行的换行让我很惊讶(UVa什么时候对输出这么随意了?)
return;
} int main()
{
LL n;
while(scanf("%lld", &n) && n) sol(n);
return 0;
}

题解:UVA10791 Minimum Sum LCM的更多相关文章

  1. UVa10791 - Minimum Sum LCM

    分析即为紫薯上的分析. 难点是发现当每个aipi作为一个单独的整数时才最优.. 答案就是将所有不同的 相同因子的积 相加即可 代码: #include<cstdio> #include&l ...

  2. Minimum Sum LCM(uva10791+和最小的LCM+推理)

    L - Minimum Sum LCM Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submi ...

  3. UVA.10791 Minimum Sum LCM (唯一分解定理)

    UVA.10791 Minimum Sum LCM (唯一分解定理) 题意分析 也是利用唯一分解定理,但是要注意,分解的时候要循环(sqrt(num+1))次,并要对最后的num结果进行判断. 代码总 ...

  4. F - Minimum Sum LCM

    LCM (Least Common Multiple) of a set of integers is defined as the minimum number, which is a multip ...

  5. UVA 10791 Minimum Sum LCM(分解质因数)

    最大公倍数的最小和 题意: 给一个数字n,范围在[1,2^23-1],这个n是一系列数字的最小公倍数,这一系列数字的个数至少为2 那么找出一个序列,使他们的和最小. 分析: 一系列数字a1,a2,a3 ...

  6. 数论-质因数(gcd) UVa 10791 - Minimum Sum LCM

    https://vjudge.net/problem/UVA-10791/origin 以上为题目来源Google翻译得到的题意: 一组整数的LCM(最小公倍数)定义为最小数,即 该集合的所有整数的倍 ...

  7. UVa 10791 Minimum Sum LCM【唯一分解定理】

    题意:给出n,求至少两个正整数,使得它们的最小公倍数为n,且这些整数的和最小 看的紫书--- 用唯一分解定理,n=(a1)^p1*(a2)^p2---*(ak)^pk,当每一个(ak)^pk作为一个单 ...

  8. Minimum Sum LCM UVA - 10791(分解质因子)

    对于一个数n 设它有两个不是互质的因子a和b   即lcm(a,b) = n 且gcd为a和b的最大公约数 则n = a/gcd * b: 因为a/gcd 与 b 的最大公约数也是n 且 a/gcd ...

  9. Minimum Sum LCM(uva 10791)

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

随机推荐

  1. Java8 流式 API(`java.util.stream`)

    熟悉 ES6 的开发者,肯定对数组的一些方法不是很陌生:map.filter 等.在对一组对象进行统一操作时,利用这些方法写出来的代码比常规的迭代代码更加的简练.在 C♯ 中,有 LINQ 来实现.那 ...

  2. Python【每日一问】24

    问: [基础题1]: 请解释一下 if __name__ == '__main__' :的作用 [基础题2]:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母. P ...

  3. AKKA HTTP 简单示例

    AKKA HTTP 简单示例 依赖包: compile("com.typesafe.akka:akka-http_2.13:10.1.8") compile("com.t ...

  4. Java爬虫利器HTML解析工具-Jsoup

    Jsoup简介 Java爬虫解析HTML文档的工具有:htmlparser, Jsoup.本文将会详细介绍Jsoup的使用方法,10分钟搞定Java爬虫HTML解析. Jsoup可以直接解析某个URL ...

  5. [转帖]Kubernetes v1.17 版本解读 | 云原生生态周报 Vol. 31

    Kubernetes v1.17 版本解读 | 云原生生态周报 Vol. 31 https://www.kubernetes.org.cn/6252.html 2019-12-13 11:59 ali ...

  6. servlet和response

    servlet基础知识 Servlet在内存中是单例----单实例对象一个Servlet类 在内存中最多有一个对象 一个项目有多少功能,将来就有多少Servlet. servlet是自启动的,就是可以 ...

  7. @Valid参数验证 BindingResult result 的使用

    1.首先导入依赖包bean-validator.jar2.在实体类上面写一些相关的验证信息:可以搜索更多的一些验证方式,这只是一部分 可以参考:点击打开链接http://blog.csdn.net/c ...

  8. CSP2019退役记

    写在前面 all last,我又失败了,我退役了 回忆我这个菜鸡OI生涯,有看机房神仙切题的乐趣,也有自己考场爆炸的辛酸 NOIP2017,我第一次参赛,我pj205二等打铁 NOIP2018,我第二 ...

  9. ServerSocketChannel简述

    一.前言 前篇文章中了解了SocketChannel:提供了连接到套接字通道,从某种层面而言,NIO中提供了类似于java.net包中对于网络操作的api的功能.既然已经有连接到Socket套接字的通 ...

  10. WebAPI 权限控制解决方案——Phenix.NET企业应用软件快速开发平台.使用指南.21.WebAPI服务(三)

    21.1   数据服务 21.1.1基本操作功能 Phenixヾ的数据服务,提供了如下的基本操作: 功能 Type URI 参数 完整获取实体集合对象 GET api/Data 分页获取实体集合对象 ...