最大最小公倍数

算法训练 最大最小公倍数

资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
输入格式
输入一个正整数N。
输出格式
输出一个整数,表示你找到的最小公倍数。
样例输入
9
样例输出
504
数据规模与约定
1 <= N <= 10^6

此题笔者一开始并没有思路,于是参考了其他博主的文章:
1、https://blog.csdn.net/qq_39913187/article/details/86749689
2、https://blog.csdn.net/wr132/article/details/43538151

接下来总结一下:

公倍数及最小公倍数:

两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数

规律:

1、两个整数如果互质,他们的最小公倍数是两个整数的积。
2、连续的两个整数必定互质。
3、若我们输入的 n 为奇数,那么结果为最大的三个数相乘(偶数不适用)

我们从最大的三个数开始考虑,即n、n-1、n-2这三个数,有两种情况:

1:奇-偶-奇 这种情况用于n是奇数的情况,即 最大的三个数就是 n,n-1,n-2,那么可以看到,因为n和n-2都是奇数,所以肯定不存在公因数2,假设三个数中有一个存在因数3,那么另外两个肯定不存在因数3,因为他们的变化范围都小于3,也就是说,这三个数不仅是最大的,还是互质的,也就是说最大的最小公倍数就是这三个数的乘积,即n*(n-1)*(n-2)

2:偶-奇-偶 对于这种情况两个偶数肯定是存在公因数2,也就是意味着最小公倍数要除以2,所以我们稍微缩小一下数,即n,n-1,n-3,这样就又变成奇-偶-奇的结构了,但还有一个问题,就是假如偶数n存在因数3,那么n-3也必定有因数3,这直接导致最小公倍数除以3,为了保持奇-偶-奇的结构不变,只能变那个偶数,而离他最近的偶数就是n-2了,这样3个数依然是互质的,最小公倍数就是(n-1)(n-2)(n-3)

C语言代码:

#include<stdio.h>
int main()
{
	long long N;
	scanf("%lld",&N);
	if(N<3)
		printf("%lld\n",N);
	else
		if(N%2==0)
			{
				if(N%3==0)
					printf("%lld\n",(N-1)*(N-2)*(N-3));
			
				else
					printf("%lld\n",N*(N-1)*(N-3));
			}
		else
			printf("%lld\n",N*(N-1)*(N-2));
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值