蓝桥杯-最大最小公倍数
2017-11-27 21:19
246 查看
问题描述 已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。 输入格式 输入一个正整数N。 输出格式 输出一个整数,表示你找到的最小公倍数。 样例输入 9 样例输出 504 数据规模与约定 1 <= N <= 106。
如果按照正常的暴力搜索来解决问题,可想而知肯定会超时的,所以要知道一点:相邻的两个正整数是互斥的,而且互斥的正整数的最小公倍数就是这两个正整数的乘积。
如果输入的n是奇数,那么n、n-1、n-2必定是两两互斥的(两奇夹一偶)
如果输入的n是偶数,n和n-2必定有公因子2,因此我们将n-2换成n-3试一下,但如果偶数n本身就可以被3整除,那么n-3也可以被3整除,所以当n既是偶数,又可以被3整除的时候我们直接用n-1、n-2、n-3三个数(两奇夹一偶)的乘积来表示最大最小公倍数。
#include <iostream> using namespace std; /* int main() { long n; cin>>n; long long Max=0,LCM=1; for(int i=1;i<n;i++) { for(int j=i+1;j<n;j++) { for(int k=j+1;k<=n;k++) { int l=i,m=j,n=k; while(l%2==0&&m%2==0&&n%2==0){ LCM*=2; l/=2;m/=2;n/=2; } LCM=LCM*l*m*n; if(LCM>Max)Max=LCM; LCM=1; } } } cout<<Max; return 0; }*/ int main(){ long long n,ans; cin>>n; if(n<=2)ans=n; else if(n%2)ans=n*(n-1)*(n-2); else{ if(n%3)ans=n*(n-1)*(n-3); else ans=(n-1)*(n-2)*(n-3); } cout<<ans; return 0; }
相关文章推荐
- 蓝桥杯-算法训练之最大最小公倍数——ALGO-2
- 蓝桥杯 最大最小公倍数
- 蓝桥杯ALGO-2 最大最小公倍数
- 蓝桥杯 ALGO-2 最大最小公倍数 Java
- 蓝桥杯VIP试题 最大最小公倍数
- 蓝桥杯 - 算法训练 - ALGO-2 最大最小公倍数(数论+贪心)
- 蓝桥杯 算法训练 最大最小公倍数
- 蓝桥杯—算法训练 最大最小公倍数 (简单贪心思想)
- 蓝桥杯 算法训练 ALGO-2 最大最小公倍数
- 蓝桥杯算法训练——最大最小公倍数(贪心)
- 蓝桥杯 - 算法训练 - ALGO-2 最大最小公倍数
- 蓝桥杯 最大最小公倍数
- 蓝桥杯-算法训练-ALGO-2-最大最小公倍数(贪心)
- 蓝桥杯 算法训练 最大最小公倍数 简单贪心算法
- 蓝桥杯 算法训练 最大最小公倍数
- 蓝桥杯 最大最小公倍数
- 蓝桥杯—算法训练 最大最小公倍数 (简单贪心思想)
- 蓝桥杯竞赛题——算法训练【最大最小公倍数】贪心
- 蓝桥杯 求最大最小公倍数
- 蓝桥杯—— 算法训练 最大最小公倍数(贪心)