2018蓝桥杯|算法训练|最大最小公倍数
问题描述
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
输入格式
输入一个正整数N。
输出格式
输出一个整数,表示你找到的最小公倍数。
样例输入
9
样例输出
504
数据规模与约定
1 <= N <= 106。
答案来源:http://blog.csdn.net/liuchuo/article/details/51989099
#include <iostream> using namespace std; int main() { long long n, ans; cin >> n; if(n <= 2) ans = n; else if(n % 2 == 1) ans = n * (n-1) * (n-2); else if(n % 3 == 0) ans = (n - 1) * (n - 2) * (n - 3); else ans = n * (n - 1) * (n - 3); cout << ans; return 0; }
(锦囊)贪心算法:
贪心方法是一种改进的分级处理方法。他首先根据题意,选取一种度量标准,然后按照这种度量标准计算局部的最优解。(关键:选取最优度量标准)
思路:
n<=2 时 最小公倍数是n
n为奇数时 最大最小公倍数是最末三位数相乘
n为偶数时 (由于最末三位数为 偶-奇-偶型,最小公倍数是三个数乘积除以2)
若n还是3的倍数,比如6 最大最小公倍数是(n-1)*(n-2)*(n-3)
若n不是3的倍数,比如8 最大最小公倍数是n*(n-1)*(n-3) 因为n-2是偶数