WUSTOJ 1304: 最大最小公倍数(Java)

108 篇文章 0 订阅
80 篇文章 18 订阅
题目链接:1304: 最大最小公倍数
Description

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

Input

输入一个正整数 N N N 3 ⩽ N ⩽ 1 0 6 3 \leqslant N \leqslant 10^6 3N106

Output

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

Sample Input
9
Sample Output
504
分析💬

1 ∼ n 1 \sim n 1n最大的三个互质的数的乘积就是结果。

这里要用到2个结论(证明):

  1. 任意两个相邻的正整数互质
  2. 任意两个相邻的正奇数互质

因此

  1. n n n为奇数时, a n s = n ∗ ( n − 1 ) ∗ ( n − 2 ) ans=n*(n-1)*(n-2) ans=n(n1)(n2),这三个数两两互质

  2. n n n为偶数时, n , n − 1 , n − 2 n,n-1,n-2 nn1n2三个数中的 n n n n − 2 n-2 n2都是偶数,不互质,因此需要将其中一个数变为奇数。
    若将最小 n − 2 n-2 n2变为 n − 3 n-3 n3,那么 n n n n − 3 n-3 n3有可能都是 3 3 3的倍数,那就不互质了,因此需要判断 n n n是否是 3 3 3的倍数。
    n n n 3 3 3的倍数,就将 n n n变为 n − 3 n-3 n3,则 a n s = ( n − 1 ) ∗ ( n − 2 ) ∗ ( n − 3 ) ans=(n-1)*(n-2)*(n-3) ans=(n1)(n2)(n3)
    若不是 3 3 3的倍数,就将 n − 2 n-2 n2变为 n − 3 n-3 n3,则 a n s = n ∗ ( n − 1 ) ∗ ( n − 3 ) ans=n*(n-1)*(n-3) ans=n(n1)(n3)

代码💻
/**
 * 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为偶数,与题意相矛盾。
	故假设不成立,原结论成立

版权声明:

  1. 转载请于首页注明链接形式的WUSTOJ 1304: 最大最小公倍数(Java)——wowpH
  2. 代码原创,公开引用不能删除首行注释(作者,版本号,时间等信息);
  3. 如果有疑问欢迎评论区留言,尽量解答;
  4. 如果有错误,还望大侠评论区指正。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值