蓝桥--最大的最小公倍数

 
问题描述

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

输入格式

  输入一个正整数N。

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

  1 <= N <= 106

-------------------------------

解题思路:

  最先开始看到数据会有99997*99998*99999 想到用Java中的大数(其实用longlong就行)。

  整数N要想最小公倍数最大则三个数必须为质数,从N开始取 N*(N-1)*(n-2) 也是样例 ‘9’=9*8*7=504 采取的解法,由此向下想,如果给出的是8最小公倍数则是8*7*5=280,为什么不是*6而是*5,因为6和8的最小公倍数是24即24*7=168<280,他们有最大公约数2。

  所以此题分成两大部分考虑:

  给的数是奇数:n*(n-1)*(n-2)

  给的数是偶数:n*(n-1)*n(-3)

    这里补充一下:若给的数是偶数切偶数能被 3 整除,该解法会出问题,比如30,按照此方法解:30*29*27 这里30和27有最大公约数3(最小公倍数为30*27/3=270)结果为270*29=7830。此时应找出一个解法方法,奇数没有问题,试将原来的n减小为29(奇数状态)29*28*27=21924,经过测试若n为偶数同时n能被3整除,则将n转换为n-1,将n-1当成n即可解决:(n-1)*(n-2)*(n-3)。

题目分析:

  本题中注意两个点:1.数据类型 2.对最小公倍数的熟练掌握

AC Code :

 1 #include<stdio.h>
 2 int main() {
 3     long long  n,ans;
 4     while(scanf("%I64d",&n)!=EOF) {
 5         if(n<=2)ans=n;
 6         else if(n%2) {
 7             ans=n*(n-1)*(n-2);
 8         } else {
 9             if(n%3)
10                 ans=n*(n-1)*(n-3);
11             else
12                 ans=(n-1)*(n-2)*(n-3);
13         }
14         printf("%I64d\n",ans);
15     }
16     return 0;
17 }

 

posted @ 2017-02-20 16:06  马丁黄瓜啊  阅读(422)  评论(0编辑  收藏  举报