0
点赞
收藏
分享

微信扫一扫

【第15天】给定两个整数a和b,求它们的最小公倍数 | LCM运用


学习指引

  • ​​序、专栏前言​​
  • ​​序、本章前言​​
  • ​​一、求lca的两种方法​​
  • ​​1)、暴力求解法​​
  • ​​1、模板代码​​
  • ​​2)、公式法​​
  • ​​1、模板代码​​

  • ​​二、【例题1】​​
  • ​​2、解题思路​​
  • ​​3、模板代码​​
  • ​​三、【例题2】​​
  • ​​2、解题思路​​
  • ​​3、模板代码​​
  • ​​四、推荐专栏​​
  • ​​六、课后习题​​

序、专栏前言

   本专栏开启,目的在于帮助大家更好的掌握学习​​Java​​​,特别是一些​​Java学习者​​难以在网上找到系统地算法学习资料帮助自身入门算法,同时对于专栏内的内容有任何疑问都可在文章末尾添加我的微信给你进行一对一的讲解。
   但最最主要的还是需要独立思考,对于本专栏的所有内容,能够进行完全掌握,自己完完全全将代码写过一遍,对于算法入门肯定是没有问题的。
   算法的学习肯定不能缺少总结,这里我推荐大家可以到​​​高校算法社区​​​将学过的知识进行打卡,以此来进行巩固以及复习。
  学好算法的唯一途径那一定是题海战略,大量练习的堆积才能练就一身本领。专栏的任何题目我将会从【题目描述】【解题思路】【模板代码】【代码解析】等四板块进行讲解。

序、本章前言

  既然学会了最大公约数,那么求最小公倍数我们也一定得会。如果掌握了前者,那么后者对我们而言则是砍瓜切菜。今天我们通过三个方法帮助大家掌握求最小公倍数。而此类问题我们也称之为​​lca​​​,类似求最大公约数叫做​​gcd​​一样。

一、求lca的两种方法

  ​​lca​​​是指的是最小公倍数。它指的是两个或多个整数公有的倍数叫做它们的公倍数,而其中除去​​0​​​符合条件最小的公倍数我们称之为​​最小公倍数​​​。下面我们都以两个整数​​a​​​和​​b​​为试例求解。

1)、暴力求解法

  假设​​a​​​和​​b​​​的最小公倍数是​​c​​​。那么我们必然能找到两个整数​​x​​​和​​y​​​,满足以下等式
【第15天】给定两个整数a和b,求它们的最小公倍数 | LCM运用_算法
  如果假设​​​a​​​大于​​b​​​,那么一定可得​​x​​​小于​​y​​​,反之亦然。所以我们可以对​​x​​​进行枚举,当首次满足条件
【第15天】给定两个整数a和b,求它们的最小公倍数 | LCM运用_开发语言_02
  由此我们可以对​​​x​​​进行枚举,当符合条件时,​​ax​​​就是我们的最小公倍数。为什么不枚举​​y​​​呢?因为​​x​​​比​​y​​小,我们可以更早的找到答案。

1、模板代码

import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
int b=sc.nextInt();
int x=1;
while (a*x%b!=0){
x++;
}
System.out.println(a*x);
}
}

2)、公式法

  求两数​​a​​​和​​b​​​的最小公倍数,其实是有一个公式的,这公式还涉及到它们的最大公因数。假设​​a​​​和​​b​​​的最小公倍数是​​c​​​,最大公因数是​​d​​。存在一个等式:两个数的乘积等于这两个数的最大公约数与最小公倍数的积。即有下式
【第15天】给定两个整数a和b,求它们的最小公倍数 | LCM运用_开发语言_03
转换过来可知:
【第15天】给定两个整数a和b,求它们的最小公倍数 | LCM运用_蓝桥杯_04
根据上章学习过​​​gcd​​​函数,我们可知:
【第15天】给定两个整数a和b,求它们的最小公倍数 | LCM运用_开发语言_05
最终可得:
【第15天】给定两个整数a和b,求它们的最小公倍数 | LCM运用_学习_06
  由此我们发现,​​​lcm​​​函数的实现,只需要基于​​gcd​​实现即可。这也是我们常用方法。

1、模板代码

static int gcd(int a,int b){
return b == 0 ? a:gcd(b,a%b);
}
static int lcm(int a, int b){
return a/gcd(a,b)*b;//最小公倍数=两数之积÷两数最大公约数
}

  注意​​lcm​​​函数内是先除法再乘法,防止先乘法时​​ab​​​太大产生爆​​int​​​的情况。
【第15天】给定两个整数a和b,求它们的最小公倍数 | LCM运用_蓝桥杯_07

二、【例题1】

  给定多组测试数据,每次给定两个整数【第15天】给定两个整数a和b,求它们的最小公倍数 | LCM运用_学习_08,请你打印出它们的最小公倍数【第15天】给定两个整数a和b,求它们的最小公倍数 | LCM运用_开发语言_09

2、解题思路

  题目难度:⭐️

  写出​​gcd​​​函数模板和​​lcm​​模板,直接套用即可。

3、模板代码

import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while (sc.hasNext()){
int a=sc.nextInt();
int b=sc.nextInt();
System.out.println(lcm(a,b));
}
}
static int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
static int lcm(int a,int b){
return a/gcd(a,b)*b;
}
}
  • 【第15天】给定两个整数a和b,求它们的最小公倍数 | LCM运用_学习_10直接套用​​​lcm​​模板,注意先除再乘。

三、【例题2】

  给定一个整数​​t​​​,然后输入​​t​​​个整数,请你打印出它们的最小公倍数【第15天】给定两个整数a和b,求它们的最小公倍数 | LCM运用_学习_11

2、解题思路

  题目难度:⭐️

  写出​​gcd​​​函数模板和​​lcm​​模板,求多个数的最小公倍数类似于求多个数的最大公约数。

3、模板代码

import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int t=sc.nextInt();
int a=sc.nextInt();
int b=sc.nextInt();
int g=lcm(a,b);
for (int i = 2; i <t; i++) {
int c=sc.nextInt();
g=lcm(c,g);
}
System.out.println(g);
}
static int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
static int lcm(int a,int b){
return a/gcd(a,b)*b;
}
}

举报

相关推荐

0 条评论