• 28-算法训练 最大最小公倍数 -贪心


                    算法训练 最大最小公倍数  
    时间限制:1.0s   内存限制:256.0MB
          
    问题描述

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

    输入格式

    输入一个正整数N。

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

    1 <= N <= 106。

    注意:

    1.数据大,int 会超过范围;

    2.推导过程:

    n 为奇数时, 毫无疑问 n * (n - 1) * (n - 3) 最大,且是最小公倍数,应为两两之间没有公约数,因为相邻的n, n -1 只差为1,肯定不能,而 n, n - 2 之间差 2 但都是奇数,有都不能被2整除,故,三者之积为最小公倍数;

    n 为偶数时:

    n * (n - 1) * (n - 3)  这样应该是最大的,但是无法保证 n, n - 3 之间不能被3整除,如,9,10, 11, 12, 故此时就得用下面的式子最大了;

    (n - 1) * (n - 2) * (n - 3), 这样(n-1)为奇数,如第一种情况了,所以一定三者没有大于1的公约数。

    另外: 当 n = 1, n = 2时公式不适用了!!!要特判。

    import java.util.Scanner;
    
    public class Main{
    
    	public static void main(String[] args) {
    		Scanner cin = new Scanner(System.in);
    		long n;
    		n = cin.nextLong();
    		if(n == 1) {
    			System.out.println(1);
    		}
    		else if(n == 2) {
    			System.out.println(2);
    		}
    		else {
    			if(n % 2 == 0) {
    //				System.out.println(Math.max(n * (n - 1) * (n - 3), (n - 1) * (n - 2) * (n - 3)) );
    				//n 和 n - 3 之间可以会被3整除,如9,10,11,12
    				if(n % 3 == 0) {
    					System.out.println((n - 1) * (n - 2) * (n - 3));
    				}
    				else {
    					System.out.println(n * (n - 1) * (n - 3));
    				}
    			}
    			else {
    				System.out.println(n * (n - 1) * (n - 2));
    			}
    		}
    	}
    }
    

      

  • 相关阅读:
    异步-promise、async、await
    node
    node基础 day1
    gulp的简介以及使用方法
    web前端安全——常见的web攻击方法
    Linux修改IP地址
    在linux下批量删除文件
    常用内容的正则表达式
    Oracle 数据库自带用户有哪些
    统计Oracle数据库当前User下各表的记录数
  • 原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/10424709.html
Copyright © 2020-2023  润新知