zoukankan      html  css  js  c++  java
  • 蓝桥--最大的最小公倍数

     
    问题描述

      已知一个正整数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
    ",ans);
    15     }
    16     return 0;
    17 }
  • 相关阅读:
    Java 中的JOption函数
    01背包与完全背包(对比)
    AC注定不平坦(大神回忆录)
    背包精讲之——01背包
    动规问题概述(待整理)
    背包九讲
    Tautology(递推)||(栈(stack))(待整理)
    深度优先和广度优先区别
    Linux下JDK、Tomcat的安装及配置
    同IP不同端口Session冲突问题
  • 原文地址:https://www.cnblogs.com/A--Q/p/6420009.html
Copyright © 2011-2022 走看看