您的位置:首页 > 其它

贪心解决最大最小公倍数问题

2016-03-04 22:03 369 查看
问题描述:给定一个整数n后,你需要任取三个不大于n的数,取法不限,每个数可取多个,使得取到的这三个数的最小公倍数在所有取法中是最大的。

说明:来源“蓝桥杯”题库;哈工大题库(http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1632)

参考:http://blog.csdn.net/u011669700/article/details/18702757

解题思路:

先确定n,然后确定n-1,最后就是找一个尽量大的和它们都互质的数,从n-2开始往小判断。

java代码:

import java.util.Scanner;

public class Main {

static boolean makesure(int a,int b){

int r=a%b;

while(r!=0){

a=b%r;

b=r;

r=a%b;

}

if(b==1)return true;

else return false;

}

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner read = new Scanner(System.in);

int n = read.nextInt();

int m=n-2;

boolean mark=true;

while(mark){

if(makesure(n,m)&&makesure(n-1,m))mark=false;

else m--;

}

System.out.print(n*(n-1)*m);

}

}

更正:当n是3倍数,且n>6时,m会取偏小。

import java.util.Scanner;

public class demo {

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner read=new Scanner(System.in);

long n=read.nextLong();

long ans;

if(n<=2){

ans=n;

}

else if(n%2==1){

ans=n*(n-1)*(n-2);

}

else{

if(n%3!=0){

ans=n*(n-1)*(n-3);

}

else

ans=(n-1)*(n-2)*(n-3);

}

System.out.print(ans);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: