问题描述:给定一个整数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);
}
}
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);
}
// 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);
}
}