【最小公倍数LCM】通俗理解以及Java代码实现

最小公倍数

    • [什么最小公倍数(Least Common Multiple)](#什么最小公倍数(Least Common Multiple))
    • 最小公倍数计算方法
    • 用代码实现最小公倍数
    • [JAVA练习最小公倍数为 K 的子数组数目(最大公约数法)](#JAVA练习最小公倍数为 K 的子数组数目(最大公约数法))

什么最小公倍数(Least Common Multiple)

最小公倍数(LCM)是指两个或多个整数共有的最小正倍数,即是这些数的公倍数中最小的一个。计算最小公倍数常常用于问题如合并分数、时间单位的转换等。

最小公倍数计算方法

  1. 分解质因数法: 将每个数分解质因数,然后取各数中各质因数的最高次幂,相乘即为最小公倍数。

    例如:计算12和18的最小公倍数。

    • 12的质因数分解为2^2 * 3,18的质因数分解为2 * 3^2。
    • 取各质因数的最高次幂,得到2^2 * 3^2 = 36。
  2. 使用最大公约数: 最小公倍数等于两数乘积除以它们的最大公约数。如果不清楚什么是最大公约数 请移步->最大公约数讲解

    例如:计算15和25的最小公倍数。

    • 15和25的最大公约数为5。
    • 最小公倍数 = (15 * 25) / 5 = 75。

通过这些方法,我们可以计算得到两个或多个数的最小公倍数。

用代码实现最小公倍数

java 复制代码
public int lcm(int m,int n){ //求最小公倍数
        int M = m,N = n;
        while(n != 0){
            int r = m % n;
            m = n;
            n = r;
        }
        return M * N / m;
    }

JAVA练习最小公倍数为 K 的子数组数目(最大公约数法)

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 nums子数组 中满足 元素最小公倍数为 k 的子数组数目。

子数组 是数组中一个连续非空的元素序列。

数组的最小公倍数 是可被所有数组元素整除的最小正整数。

示例 1 :

复制代码
输入:nums = [3,6,2,7,1], k = 6
输出:4
解释:以 6 为最小公倍数的子数组是:
- [3,6,2,7,1]
- [3,6,2,7,1]
- [3,6,2,7,1]
- [3,6,2,7,1]

示例 2 :

复制代码
输入:nums = [3], k = 2
输出:0
解释:不存在以 2 为最小公倍数的子数组。
java 复制代码
class Solution {
  public int subarrayLCM(int[] nums, int k) {
        int num = 0;
        for(int i = 0;i < nums.length;i++){
        	int flag = nums[i];
        	if(flag == k) num++;
	        for (int j = i + 1; j < nums.length; j++) {
                flag = lcm(flag,nums[j]);
				if(flag == k) {
					num++;
				}
                if(flag > k){ //当计算出来的最小公倍数比所给最小公倍数k大时退出内层循环
                    break;
                }
				
			}
        }      
	        return num;   
	    }
    public int lcm(int m,int n){ //求最小公倍数
        int M = m,N = n;
        while(n != 0){
            int r = m % n;
            m = n;
            n = r;
        }
        return M * N / m;
    }
}
相关推荐
To_OC2 小时前
LC 51 N 皇后:我以为难的是回溯,结果栽在了对角线下标
javascript·算法·leetcode
Scott9999HH2 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
腻害兔2 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
2401_841495642 小时前
【操作系统】进程同步与互斥实验报告
c++·算法·操作系统·进程·并发·同步·互斥
码智社3 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海3 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖4 小时前
JDK 26 新特性详解
java·开发语言
马优晨4 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区6 小时前
怎么把C语言学到精通?
c语言·开发语言