最大最小公倍数---蓝桥杯算法集

问题描述
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。

输入格式
输入一个正整数N。

输出格式
输出一个整数,表示你找到的最小公倍数。
样例输入
9
样例输出
504
数据规模与约定
1 <= N <= 106。

思路:—>利用互质的性质
由于要选出3个数,使他们的最小公倍数最大。很明显,我们最好选出3个两两互质的数。如何选出这样的3个数呢?由于相邻的两个数必然互质,所以我们主要需要考虑的是选出的最大的数和最小的数的关系,这里需要考虑N的性质:

(1)如果N为奇数,那么N与N-2互质,则N、N-1、N-2即为选定的3个数

(2)如果N为偶数,那么N与N-2最大公约数为2,此时需要考虑N与N-3的关系:

如果N不能被3整除,则N-3也不能被3整除,此时N与N-3互质,则N、N-1、N-3即为选定的3个数

如果N能被3整除,则N-3也能被3整除,此时N与N-3不互质,但是N-1与N-3必然互质(N-1、N-3都为奇数),所以N-1、N-2、N-3即为选定的3个数

#include<iostream>
using namespace std;

int main()
{
	long long n;
	cin>>n;
	if(n%2==1)
	  cout<<n*(n-1)*(n-2);
	else if(n%3!=0)
	  cout<<n*(n-1)*(n-3);
	else
	  cout<<(n-1)*(n-2)*(n-3);
	return 0;
}

注:
@int,long和long long的区别
int
(4个字节,32位)unsigned int 0~4294967295
int -2147483648~2147483647
_int32
(4个字节,32位)unsigned _int32 0~4294967295_int32 -2147483648 ~ 2147483647
long
(4个字节,32位)unsigned long 0~4294967295long -2147483648~2147483647
long long
(8个字节,64位)unsigned long long:0 ~ 1844674407370955161long long:-9223372036854775808~9223372036854775807
_int64
(8个字节,64位)unsigned _int64的最大值:0~18446744073709551615_int64:-9223372036854775808 ~ 9223372036854775807
@其中int 和 long 的区别
早期的操作系统是16位系统
int用二字节表示,范围是-32768~32767;
long用4字节表示,范围是-2147483648~2147483647。
后来发展到32位操作系统
int 用4字节表示,与long相同。
目前的操作系统已发展到64位操作系统,但因程序编译工艺的不同,两者表现出不同的差别:
32位编译系统:int占四字节,与long相同。
64位编译系统:int占四字节,long占8字节,long数据范围变为:-263 ~ 263-1

发布了106 篇原创文章 · 获赞 53 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_43595030/article/details/104065359