这篇文章运用简单易懂的例子给大家介绍java中求最小公倍数的方法,代码非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
问题描述:
已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。
输入格式:
输入一个正整数N。
输出格式:
输出一个整数,表示你找到的最小公倍数。
样例输入:
9
样例输出:
504
数据规模与约定:
1 <= N <= 106
思路:
首先声明几个概念:
两个非0相邻自然数的最小公倍数是它们的乘积;相邻两个奇数的最小公倍数是它们的乘积;相邻两个偶数(0除外)的最小公倍数是它们乘积的一半。
现在上升到三个数的最小公倍数,要按照N的奇偶性分两种情况:
一、当n为奇数:n、n-1、n-2的乘积
二、当n为偶数:n-1、n-2、n-3是一组极大解,如果答案要大于当前值,只能是大于这3个数的乘积,那么只能把其中一个数变成n,并且三个数也要两两互质。n、n-2、n-3偶偶奇明显不互质;n、n-1、n-3偶奇奇;n、n-1、n-2偶奇偶明显不互质。
那么答案只能是n-1、n-2、n-3或者是n、n-1、n-3。但是n、n-3虽然是一个奇数,一个偶数,但是它们不连续可能不互质例如5,6,3三个数。
n为奇数:n、n-1、n-2
n为偶数: n是3的倍数 n-1、n-2、n-3
n不是3的倍数 n、n-1、n-3
示例一:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input=new Scanner(System.in); long N=input.nextLong(); long temp=0; if(N<=2){ System.out.println(N); } else if(N%2==0){ temp=(N-1)*(N-2)*(N-3); if(N%3!=0){ temp=Math.max(temp,N*(N-1)*(N-3)); } System.out.println(temp); } else { System.out.println(N*(N-1)*(N-2)); } } }
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
程序分析:利用辗除法。
示例二:
package one;
import java.util.*;public class ProOne {
public static void main(String[] args)
{
int m=0,n=0,m1=0,n1=0;
int a;
Scanner scanner = new Scanner(System.in);
System.out.println("请输dao入m的值:");
m=scanner.nextInt();
System.out.println("请输入n的值:");
n=scanner.nextInt();
//将输入的m和n值备份;
m1=m;
n1=n;
//取得两个数相除的余数;
a=m%n;
while(a!=0)
{
m1=n1;n1=a;a=m1%n1;
}
System.out.println("m,n的最大公约数为:"+n1);
//求两个数字的最小公倍数的方法为:(两个数的乘积)/(两个数字的最大公约数);
System.out.println("m,n两个数的最小公倍数为:"+m*n/n1);
}
}
技巧:考虑N<3的情况,而且这道题注意用long。
关于java中求最小公倍数的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。