算法训练 最大最小公倍数

2020-04-20 17:42:48 浏览数 (1)

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

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

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

(PS:下面是我的代码。)

代码语言:javascript复制
import java.math.BigInteger;
import java.util.Scanner;

public class Main {

    public static BigInteger GCD(BigInteger a , BigInteger b){
        BigInteger gcd ;
        while( !b.equals(BigInteger.ZERO)){
            gcd = a.remainder(b);
            a = b;
            b = gcd;
        }
        gcd = a;
        return gcd;
    }

    public static BigInteger Max_GCM(BigInteger n){
        int cnt = 0;
        BigInteger mul = n;
        BigInteger j = n.subtract(BigInteger.ONE);
        while(cnt != 2){
            if ( GCD(mul,j).equals(BigInteger.ONE)){
                mul = mul.multiply(j);
                cnt  ;
            }
            j = j.subtract(BigInteger.ONE);
        }
        return mul;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        String str = in.next();
        BigInteger n = new BigInteger(str);
        BigInteger TWO = new BigInteger("2");
        if ( n.compareTo(TWO) == 0){
            System.out.print(2);
        }else if ( n.compareTo(BigInteger.ONE) == 0){
            System.out.print(1);
        }else if ( n.compareTo(BigInteger.ZERO) <= 0){
            System.out.print(0);
        }else{
            BigInteger max = Max_GCM(n);
            System.out.print(max);
        }
        in.close();
    }
}

(PS:百度了下,由于后台测试数据出问题,所以判的只有60分)

(PS:下面是网上的AC代码,和自己相比,自己简直low到家了。数学结论不知道,真心不知道那些参加ACM的同学是怎么挺过来的。。。)

代码语言:javascript复制
#include<iostream>
using namespace std;
int main()
{
    long long n,ans;
    cin>>n;
    if(n<=2)
    ans=n;
    else if(n%2==1)
    ans=n*(n-1)*(n-2);
    else
    {
        if(n%3==0)
        ans=(n-1)*(n-2)*(n-3);
        else
        ans=n*(n-1)*(n-3);
    }
    cout<<ans<<endl;
    return 0;
} 

0 人点赞