蓝桥杯算法训练超全习题题解——ALGO-2.最大最小公倍数**

每日刷题(五十五)

ALGO-2、最大最小公倍数

在这里插入图片描述
在这里插入图片描述
两个数的最小公倍数就是两个数的乘积除以最大公约数,最大公约数就是两个数的最大的相同因子。如果两数互质,那么他们的最小公倍数是他俩的乘积

这个题需要仔细分析,考虑N是奇数还是偶数

1、如果N是奇数,那么他们的最小公倍数最大可以使N * (N - 1) * (N - 2)

2.1、如果N是偶数,那么他们的最小公倍数最大是多少呢,这就需要思考了
因为N是偶数,N - 1肯定是奇数,N - 2又是偶数,偶数和偶数之间可不互质,所以我们需要把N - 2 换成 N - 3,即为N * (N - 1) * (N - 3),就是2.2的情况,那么问题又来了,如果N是3的倍数,那么从贪心的角度看,我们先前是考虑N - 2的值,现在我们应该考虑N的值是否发生变化使得式子成立,
即改为(N - 1) * (N - 2) * (N - 3)

2.2、最小公倍数最大为N * (N - 1) * (N - 3),为什么不考虑除3以外的数字呢,因为其他数字不会是3的倍数,这点很容易理解

这里需要注意的一点:因为N的上限很大,我们需要采用long long型

详细C代码如下:

#include<stdio.h>

int main()
{
	long long N;
	scanf("%lld", &N);
	int i;
	if(N <= 3)
	{
		long long sum = 1;
		for(i = 1; i <= N; i++)
		{
			sum *= i;
		}
		printf("%d\n", sum);
		return 0;
	}
	if(N % 2)		//奇数 
	{
		printf("%lld\n", (N * (N - 1) * (N - 2)));
	}
	else if(N % 3)		//偶数,不能被3整除 
	{
		printf("%lld\n", (N * (N - 1) * (N - 3)));
	}
	else
	{
		printf("%lld\n", ((N - 1) * (N - 2) * (N - 3)));
	}
	return 0;
} 

部分运行结果如下:
在这里插入图片描述
在这里插入图片描述

如果喜欢我的文章,请记得三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持,下期更精彩!!!

发布了99 篇原创文章 · 获赞 16 · 访问量 5905

猜你喜欢

转载自blog.csdn.net/qq_44631615/article/details/105286617