最大最小公倍数——《蓝桥杯刷题之路》


1. 题目要求

资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。

输入格式

输入一个正整数N。

输出格式

输出一个整数,表示你找到的最小公倍数。

样例输入

9

样例输出

504

数据规模与约定

1 <= N <= 10^6。

2. 基本概念

首先要知道什么是最小公倍数,以及怎么去求最小公倍数。

2.1 最小公倍数的概念

公倍数(common multiple)指在两个或两个以上的自然数中,如果它们有相同的倍数,这些倍数就是它们的公倍数,其中除0以外最小的一个公倍数,叫做这几个数的最小公倍数

2.2 最小公倍数计算方法

2.2.1 分解质因数法

先把这几个数的质因数写出来,最小公倍数等于它们所有的质因数的乘积(如果有几个质因数相同,则比较两数中哪个数有该质因数的个数较多,乘较多的次数)。

看看下面例子就知道如何去做了。求45和30的最小公倍数。

45=3*3*5

30=2*3*5

45和30的不同质因数有一个2;共同的质因数有两个,分别是35

接下来共同的质因数,45中出现了两个3,所以计算最小公倍数的时候乘两个3。共同质因数5在45和30都只出现了一次,计算最小公倍数的时候乘一个5就行了。

因此,45和30的最小公倍数为:2*3*3*5=90

2.2.2 公式法

由于两个数的乘积等于这两个数的最大公约数与最小公倍数的积。即(a,b)×[a,b]=a×b。所以,求两个数的最小公倍数,就可以先求出它们的最大公约数,然后用上述公式求出它们的最小公倍数。

例如,求45和30的最小公倍数。

45和30的最大公约数为15,两者之积为45*30=1350

然后用1350除以15,即1350÷15=90

3. 解题思路

通过分解质因数法可以知道,最小公倍数的计算过程中,会因为有一些共同质因数,而导致最小公倍数小于两者的乘积,对于三个数的最小公倍数也是如此,因此我们要尽量避免这种因为共同质因数而带来的损失,就会使得我们得到的最小公倍数是局部最大的。因此只要我们找出三个最大的互质数之积,这题就解决了。

  1. 由于连续的3个数中,如果是奇数 偶数 奇数 ,那这三个数一定互质,证明方法也很简单。我们用反证法:

大前提是 n 为奇数,则 n-2、n-1、n这三个数满足奇数 偶数 奇数

我们先证明 n 和 n-2 这两个奇数互质。

假设 n 和 n-2 不互质,那么就存在一个公约数 p(p>1,且为整数),使得 n = p * q ( q 为整数),n-2 = p * r( r 为整数),

上两式相减,得到 2 = p * ( q - r ),由于 p 和 ( q - r )都是整数,故只能是 p = 2 (因为p>1)、q-r = 1,

这样就与 n 和 n-2 为奇数矛盾了,因为是2的倍数,

因此, n 和 n-2 互质。

再证明相邻两个数 n 和 n-1 互质。

假设 n 和 n-1 不互质,那么那么就存在一个公约数 p(p>1,且为整数),使得 n = p * q ( q 为整数),n-1 = p * r( r 为整数),

上两式相减,得到 1 = p * ( q - r ),由于 p 和 ( q - r )都是整数,所以 p 和( q- r )都只能为1,

这与p > 1矛盾,

因此, n 和 n-1 互质。

至此,三个连续的 奇数 偶数 奇数,n-2、n-1、n 一定两两互质。

  1. 连续的3个数中,还有可能是 偶数 奇数 偶数 这种情况,但是这种情况会导致两个偶数都是2的倍数,最小公倍数损失一半,因此我们考虑将较小的偶数减1变成奇数,这样就相当于是 n-3 、n-1、n 这三个数了。由上面知道 n-3 和 n-1 是连续的两个奇数,肯定互质,n-1和n是连续的两个数,也肯定互质,那么n和n-3是否一定互质呢?下面我们来探索一下。证明的思路和上面都是一样的。

大前提是n为偶数,,则 n-3、n-1、n这三个数满足奇数 奇数 偶数

我们下面要证明n和n-3是否互质,如果不互质,那要满足什么条件才能使得这两个数互质。

假设 n 和 n-3 不互质,那么就存在一个公约数 p(p>1,且为整数),使得 n = p * q ( q 为整数),n-3 = p * r( r 为整数),

上两式相减,得到 3 = p * ( q - r ),由于 p 和 ( q - r )都是整数,因此 p = 3 、q - r =1 或者 p = 1 ,q - r = 3,

到这里并不能找出矛盾,

因此我们添加一个条件,使之矛盾(楼下保安:去去去,你又来找茬。我:emmm…)

由于 p 是大于1的,观察两个结论中,有一个 p = 1的,所以我们就从这入手,添加一个条件使得能够得出该结论。所以,我们添加一个条件,排除掉p = 3 、q - r =1这种情况。很明显 p = 3 的时候,n 和 n - 3都是3的倍数。

因此我们添加的条件是: n 不为3的倍数( n - 3 肯定也不为3的倍数了)

按照这个条件再严格证明一下。

假设 n 和 n-3 不互质,那么就存在一个公约数 p(p>1,且为整数),使得 n = p * q ( q 为整数),n-3 = p * r( r 为整数),

上两式相减,得到 3 = p * ( q - r ),由于 n 不为3的倍数,所以 p 一定不为3,因此只能是 p = 1,q - r = 3,

这与 p > 1矛盾,

因此当 n 不为3的倍数,且 n 为奇数时,n 与 n-3 一定互质。

至此,矛盾大王实至名归。

有了这两个最优解的可能性,这样的话本题目就很简单了。

伪代码如下:

输入N
result = 1
for n form N to 3		//逆序遍历
    if n为奇数 且 result < n * (n - 1) * (n - 2)		//情况一,奇数、偶数、奇数
        result = n * (n - 1) * (n - 2)
    if n为偶数 且 不能整除3 且 result < n * (n - 1) * (n - 3) //情况一,奇数、偶数、奇数
        result = n * (n - 1) * (n - 3)
输出result

python代码如下:

N = int(input())
result = 1
for n in range(N, 2, -1):
    if n % 2 == 1 and result < n * (n - 1) * (n - 2):
        result = n * (n - 1) * (n - 2)
    if n % 2 == 0 and n % 3 != 0 and result < n * (n - 1) * (n - 3):
        result = n * (n - 1) * (n - 3)
print(result)

如果有帮助,还望少侠留下你的赞!感谢支持。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值