最大最小公倍数(蓝桥杯)

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

输入格式:输入一个正整数N。

输出格式:输出一个整数,表示你找到的最小公倍数。

样例输入:9

样例输出:504

数据规模与约定:1 <= N <= 106。

解析:要求最小公倍数中的最大数,其实就是当三个数的最大公约数为 1 ,即三个数互为质数时,三个数的乘积最大。例如对于 9 来说,9*8*7 = 504。刚开始我的思路是将数字 N 分为奇数与偶数两种处理方式,为奇数时输出 n*(n-1)*(n-2),为偶数时输出 n*(n-1)*(n-3),但是当 N = 6,按上面的思路结果为:6*5*3 = 90,很明显这三个数不互为质数,得出的答案是错误的。正确的应该是 5*4*3 = 60。由此想到,之前只考虑了当 n 为偶数时,n-2 也必为偶数,与 n 不互为质数,那么同理,当 n为 3 的倍数时,所得的 n-3 与 n 也不互为质数,所以应该将 n 分三种情况讨论。

  1. n 为偶数且为 3 的倍数时,输出 (n-1)*(n-2)*(n-3)
  2. n 为偶数但不是 3 的倍数时,输出 n*(n-1)*(n-3)
  3. n 为奇数,n-1 与 n-2 和 n 互为质数,输出 n*(n-1)*(n-2)
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            double n = sc.nextDouble();
            double ret = 1;
            if(n%2 == 0){
                if(n%3 == 0){
                    ret = (n-1)*(n-2)*(n-3);
                }else {
                    ret = n * (n - 1) * (n - 3);
                }
            }else{
                ret = n * (n-1) *(n-2);
            }
            System.out.println((long)(ret));
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值