WUSTOJ 1304: 最大最小公倍数(Java)
题目链接:🔗1304: 最大最小公倍数
Description
已知一个正整数,问从中任选出三个数,他们的最小公倍数最大可以为多少。
Input
输入一个正整数。
Output
输出一个整数,表示你找到的最小公倍数。
Sample Input
9
Sample Output
504
分析💬
中最大的三个互质的数的乘积就是结果。
这里要用到2个结论(证明):
- 任意两个相邻的正整数互质
- 任意两个相邻的正奇数互质
因此
-
当为奇数时,,这三个数两两互质
-
当为偶数时,三个数中的和都是偶数,不互质,因此需要将其中一个数变为奇数。
若将最小的变为,那么和有可能都是的倍数,那就不互质了,因此需要判断是否是的倍数。
若是的倍数,就将变为,则,
若不是的倍数,就将变为,则。
代码💻
/**
* Time 224ms
* @author wowpH
* @version 1.1
* @date 2019年6月9日下午10:51:26
* Environment: Windows 10
* IDE Version: Eclipse 2019-3
* JDK Version: JDK1.8.0_112
*/
import java.io.InputStreamReader;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(new InputStreamReader(System.in));
long n, ans;
while (sc.hasNext()) {
n = sc.nextInt();
if (1 == (n % 2)) {// n是奇数
ans = n * (n - 1) * (n - 2);
} else if (0 == (n % 3)) {// n是偶数且是3的倍数
ans = (n - 1) * (n - 2) * (n - 3);
} else {// n是偶数但不是3的倍数
ans = n * (n - 1) * (n - 3);
}
System.out.println(ans);
}
sc.close();
}
}
证:设两个正整数分别为n,n+1
假设它们不互质,那么存在一个公约数a(a>1),使得n%a=0和(n+1)%a=0成立。
因为n%a=0成立,于是(n+1)%a=1成立,与假设相矛盾。
故假设不成立,原结论成立。
结论:任意两个相邻的正奇数互质
证:设两个正奇数为n,n+2
假设它们不互质,那么存在一个公约数a(a>1),使得n%a=0和(n+2)%a=0成立
因为n%a=0,因此(n+2)%a=2成立
要想与假设不矛盾,那么a必须为2,于是n为偶数,与题意相矛盾。
故假设不成立,原结论成立
版权声明:
- 转载请于首页注明链接形式的WUSTOJ 1304: 最大最小公倍数(Java)——wowpH;
- 代码原创,公开引用不能删除首行注释(作者,版本号,时间等信息);
- 如果有疑问欢迎评论区留言,尽量解答;
- 如果有错误,还望大侠评论区指正。