最大公約數和最小倍數 java

在Java中,計算兩個數的最大公約數(Greatest Common Divisor, GCD)和最小公倍數(Least Common Multiple, LCM)是常見的編程問題。以下是具體的實現方法和代碼示例。

---

### **1. 最大公約數 (GCD)**

最大公約數是指兩個或多個整數共有約數中最大的一個。常用的方法有:

#### **方法 1:輾轉相除法(歐幾里得算法)**
這是求解最大公約數的經典算法,其核心思想是通過遞歸或循環不斷取余數,直到余數為0為止。

**公式**:
- 如果 `a % b == 0`,則 `GCD(a, b) = b`。
- 否則,`GCD(a, b) = GCD(b, a % b)`。

#### **代碼實現**:
```java
public class GCDCalculator {
? ? // 使用輾轉相除法計算最大公約數
? ? public static int gcd(int a, int b) {
? ? ? ? while (b != 0) {
? ? ? ? ? ? int temp = b;
? ? ? ? ? ? b = a % b;
? ? ? ? ? ? a = temp;
? ? ? ? }
? ? ? ? return a;
? ? }

? ? public static void main(String[] args) {
? ? ? ? int num1 = 56;
? ? ? ? int num2 = 98;
? ? ? ? System.out.println("最大公約數: " + gcd(num1, num2)); // 輸出 14
? ? }
}
```

---

### **2. 最小公倍數 (LCM)**

最小公倍數是指兩個或多個整數的最小正整數倍數。最小公倍數可以通過最大公約數計算得出。

**公式**:
- `LCM(a, b) = (a * b) / GCD(a, b)`

#### **代碼實現**:
```java
public class LCMCalculator {
? ? // 使用輾轉相除法計算最大公約數
? ? public static int gcd(int a, int b) {
? ? ? ? while (b != 0) {
? ? ? ? ? ? int temp = b;
? ? ? ? ? ? b = a % b;
? ? ? ? ? ? a = temp;
? ? ? ? }
? ? ? ? return a;
? ? }

? ? // 計算最小公倍數
? ? public static int lcm(int a, int b) {
? ? ? ? return (a * b) / gcd(a, b);
? ? }

? ? public static void main(String[] args) {
? ? ? ? int num1 = 56;
? ? ? ? int num2 = 98;
? ? ? ? System.out.println("最大公約數: " + gcd(num1, num2)); // 輸出 14
? ? ? ? System.out.println("最小公倍數: " + lcm(num1, num2)); // 輸出 392
? ? }
}
```

---

### **3. 示例運行結果**

假設輸入兩個數為 `56` 和 `98`:

- 最大公約數:`gcd(56, 98) = 14`
- 最小公倍數:`lcm(56, 98) = (56 * 98) / 14 = 392`

輸出結果:
```
最大公約數: 14
最小公倍數: 392
```

---

### **4. 注意事項**

1. **輸入驗證**:
? ?- 確保輸入的數字是正整數。
? ?- 如果輸入可能為負數或零,需要進行額外處理。

2. **溢出問題**:
? ?- 在計算 `(a * b)` 時,可能會導致整數溢出。如果可能遇到大數,可以使用 `long` 類型或 `BigInteger` 類。

#### **使用 BigInteger 的實現**:
```java
import java.math.BigInteger;

public class GCDCalculatorWithBigInteger {
? ? public static BigInteger gcd(BigInteger a, BigInteger b) {
? ? ? ? return a.gcd(b); // BigInteger 提供了內置的 gcd 方法
? ? }

? ? public static BigInteger lcm(BigInteger a, BigInteger b) {
? ? ? ? return a.multiply(b).divide(gcd(a, b));
? ? }

? ? public static void main(String[] args) {
? ? ? ? BigInteger num1 = new BigInteger("56");
? ? ? ? BigInteger num2 = new BigInteger("98");

? ? ? ? System.out.println("最大公約數: " + gcd(num1, num2)); // 輸出 14
? ? ? ? System.out.println("最小公倍數: " + lcm(num1, num2)); // 輸出 392
? ? }
}
```

---

### **總結**

1. **最大公約數**:使用輾轉相除法(歐幾里得算法)。
2. **最小公倍數**:利用公式 `LCM(a, b) = (a * b) / GCD(a, b)`。
3. **注意事項**:處理溢出問題,確保輸入合法。

通過以上代碼和方法,你可以輕松地在Java中實現最大公約數和最小公倍數的計算!如果有其他問題,歡迎繼續提問!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/901308.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/901308.shtml
英文地址,請注明出處:http://en.pswp.cn/news/901308.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據庫——視圖

一、視圖的定義與核心特性 1.基本概念 (1)視圖(View)是基于一個或多個底層表(或視圖)的虛擬表,其本身不存儲數據,僅保存查詢語句的定義。當用戶查詢視圖時,數據庫會動態執行其封裝的SQL語句,生成結果集。 (2)本質:視圖是底層表的邏輯映射,結構與表相同(由行和列…

【Proteus仿真】【32單片機-A008】MPX4115壓力檢測系統設計

目錄 一、主要功能 二、使用步驟 三、硬件資源 四、軟件設計 五、實驗現象 聯系作者 一、主要功能 1、壓力檢測與LCD顯示 2、超過上限,降壓模塊啟動 3、壓力檢測范圍15kpa-115kpa 4、壓力閾值設置 5、超限報警 二、使用步驟 系統運行后,LCD160…

java和c#的相似及區別基礎對比

用過十幾種語言,但是java和c#是最為重要的兩門。c#發明人曾主導開發了pascal和delphi,加入微軟后,參考了c和java完成了c#和net。大家用過java或c#任意一種的,可以通過本篇文章快速掌握另外一門語言。 基礎語法 變量聲明&#xf…

OpenBayes 一周速覽|1分鐘生成完整音樂,DiffRhythm人聲伴奏一鍵搞定; Stable Virtual Camera重塑3D視頻創作

公共資源速遞 5 個數據集: * 302 例罕見病病例數據集 * DRfold2 RNA 結構測試數據集 * NaturalReasoning 自然推理數據集 * VenusMutHub 蛋白質突變小樣本數據集 * Bird Vs Drone 鳥類與無人機圖像分類數據集 2 個模型: * Qwen2.5-0mni * Llama…

PostgreSQL 實例運行狀態全面檢查

PostgreSQL 實例運行狀態全面檢查 PostgreSQL 實例的健康檢查是數據庫運維的核心工作,以下是系統化的狀態檢查方法和關鍵指標解讀。 一 基礎健康檢查 1.1 實例可用性檢查 # 快速連接測試 pg_isready -h localhost -p 5432 -U postgres -d postgres# 返回狀態說明…

利用 Python 進行股票數據可視化分析

在金融市場中,股票數據的可視化分析對于投資者和分析師來說至關重要。通過可視化,我們可以更直觀地觀察股票價格的走勢、交易量的變化以及不同股票之間的相關性等。 Python 作為一種功能強大的編程語言,擁有豐富的數據處理和可視化庫&#xf…

時序約束高級進階使用詳解二:Set_Min_Delay

目錄 一、前言 二、設計示例 2.1 示例代碼 2.2 時序約束 三、Set_min_delay 3.1 start points 3.1.1 對象有效性 3.1.2 邊沿有效性 3.1.3 start point非有效起點 3.2 Through points 3.2.1 約束對象為Cells 3.2.2 約束對象為Cell pin/Net 3.3 to points 3.4 rise…

2025-4-12-C++ 學習 XOR 三元組 異或 急轉彎問題

C的學習必須更加精進一些,對于好多的函數和庫的了解必須深入一些。 文章目錄 3513. 不同 XOR 三元組的數目 I題解代碼 3514. 不同 XOR 三元組的數目 II題解代碼 晚上,10點半,參加了LC的競賽,ok了一道,哈哈~ ??第二道…

圖像形態學操作對比(Opencv)

形態學基于圖像的形狀進行操作,用于處理二值化圖像,主要包括腐蝕和膨脹兩種基本操作。這些操作通常用于去除噪聲、分隔或連接相鄰的元素以及尋找圖像中顯著的最大點和最小點。 1. 形態學操作 import cv2 import numpy as np import matplotlib.pyplot …

sql 向Java的映射

優化建議,可以在SQL中控制它的類型 在 MyBatis 中,如果返回值類型設置為 java.util.Map,默認情況下可以返回 多行多列的數據

excel中的VBA指令示例(一)

示例注釋: Sub 宏1() sub是宏開頭,宏1是宏的名稱,自定義,在按鈕中可指定用某個宏 后面是注釋 Sheets("裝配材料").Select ‘選擇表 裝配材料 Ce…

【Linux C】簡單bash設計

主要功能 循環提示用戶輸入命令(minibash$)。創建子進程(fork())執行命令(execlp)。父進程等待子進程結束(waitpid)。關鍵問題 參數處理缺失:scanf("%s", buf)…

【vue】基礎

一、vi-if 1.1基本使用 必須綁定大盒子包住的代碼,使用id或者class都可以進行綁定 new Vue({ el:"#id" el:".class" }) 1.2v-if和v-show的區別 v-show會渲染,但是不顯示,v-if不渲染不顯示 1.3vue實例的作用范圍 必須包…

【數據結構_5】鏈表(模擬實現以及leetcode上鏈表相關的題目)

書接上文,繼續編寫鏈表的功能 4.鏈表的中間插入 在鏈表中,本身是沒有下標這樣的概念的,不像順序表,順序表根據下標訪問元素,O(1)復雜度。鏈表需要遍歷之后找到正確的位置才能進行插入,為O(N&a…

C語言的發展史

一、起源 C語言的起源可以追溯到20世紀60年代末期。其前身是BCPL(Basic Combined Programming Language)語言,由劍橋大學的Martin Richards于1967年在CPL語言的基礎上簡化而來。1970年,美國貝爾實驗室的Ken Thompson以BCPL語言為…

深入解析棧式虛擬機與反向波蘭表示法

1.1 什么是虛擬機? 虛擬機(Virtual Machine, VM)是一種軟件實現的計算機系統,提供與物理計算機相類似的環境,但在軟件層面運行。虛擬機的存在簡化了跨平臺兼容性、資源管理以及安全隔離等問題。 1.2 棧式虛擬機的架構…

ubuntu 系統安裝Mysql

安裝 mysql sudo apt update sudo apt install mysql-server 啟動服務 sudo systemctl start mysql 設置為開機自啟 sudo systemctl enable mysql 查看服務狀態 (看到類似“active (running)”的狀態信息代表成功) sudo systemctl status mysql …

《前端面試題之 CSS篇(第一集)》

目錄 1、CSS的盒模型2、CSS選擇器及其優先級3、隱藏元素的方法有那些4、px、em、rem的區別及使用場景5、重排、重繪有什么區別6、水平垂直居中的實現7、CSS中可繼承與不可繼承屬性有哪些8、Sass、Less 是什么?為什么要使用他們?9、CSS預處理器/后處理器是…

HTTP:四.HTTP連接

HTTP(Hypertext Transfer Protocol)是一種用于傳輸超文本數據的應用層協議。它是互聯網上最常用的協議,用于在客戶端和服務器之間傳輸數據。HTTP協議通常用于從Web服務器傳輸網頁和文件到客戶端瀏覽器,并支持其他用途,如傳輸API數據和傳輸文件。 HTTP連接是指客戶端向服務…

opencv 識別運動物體

import cv2 import numpy as npcap cv2.VideoCapture(video.mp4) try:import cv2backSub cv2.createBackgroundSubtractorMOG2() except AttributeError:backSub cv2.bgsegm.createBackgroundSubtractorMOG()#形態學kernel kernel cv2.getStructuringElement(cv2.MORPH_REC…