網(wǎng)站首頁 編程語言 正文
題目描述
求任意兩個正整數(shù)的最小公倍數(shù)
問題分析
兩個或多個整數(shù)公有的倍數(shù)叫做它們的公倍數(shù),其中除0以外最小的一個公倍數(shù)就叫做這幾個整數(shù)的最小公倍數(shù)。整數(shù)a,b的最小公倍數(shù)記為[a,b],同樣的,a,b,c的最小公倍數(shù)記為[a,b,c],多個整數(shù)的最小公倍數(shù)也有同樣的記號。
.與最小公倍數(shù)相對應(yīng)的概念是最大公約數(shù),a,b的最大公約數(shù)記為(a,b)。關(guān)于最小公倍數(shù)與最大公約數(shù),我們有這樣的定理:(a,b)x[a,b]=ab(a,b均為整數(shù))。
——百度百科
我們可以通過兩個方法求最小公倍數(shù)。
第一種是窮舉法,列舉所以可能的數(shù),直到找到最小的公倍數(shù);第二種是使用最小公倍數(shù)與最大公約數(shù)的一個定理——兩個整數(shù)的最小公倍數(shù)等于兩數(shù)之積除以兩個數(shù)的最大公因數(shù),即(a,b)x[a,b]=ab((a,b)表示a和b的最大公約數(shù),[a,b]表示a和b的最小公倍數(shù),a,b均為整數(shù))
方法一:窮舉法
假設(shè)有兩個整數(shù)num1和num2,這兩個整數(shù)的最小公倍數(shù)一定大于等于它們的最大值,同時小于等于它們的積。
按從小到大的順序遍歷整個范圍內(nèi)的所有整數(shù),第一個公因數(shù)即為它們的最小公倍數(shù)。
【不考慮負數(shù),求負數(shù)的最小公倍數(shù)本就是無意義的(相當(dāng)于求兩個正數(shù)的最大公倍數(shù))】
#include <stdio.h> /** * @brief 獲取最小公倍數(shù)(窮舉法) * @param num1 第一個正整數(shù) * @param num2 第一個正整數(shù) * @return 返回最小公倍數(shù) */ int Get_Min_Comm_Multiple(int num1, int num2) { int i = 0, tmp = 0, mul = 0; tmp = num1 > num2 ? num1 : num2; //獲取最大值 mul = num1 * num2; //兩數(shù)之積 for(i = tmp; i <= mul; i++) { //同時為num1和num2的倍數(shù) if(i % num1 == 0 && i % num2 == 0) break; } return i; } int main() { int num1, num2; printf("請輸入兩個正整數(shù)\n"); scanf("%d%d", &num1, &num2); printf("它們的最小公倍數(shù)為:%d\n",Get_Min_Comm_Multiple(num1, num2)); return 0; }
運行結(jié)果
方法二:定理法
使用定理求最小公倍數(shù)(兩個整數(shù)的最小公倍數(shù)等于兩數(shù)之積除以兩個數(shù)的最大公因數(shù)),需要先求出兩個整數(shù)的最大公因數(shù),最大公因數(shù)這里采用輾轉(zhuǎn)相除法。(最大公因數(shù)的求法可以參考我上一篇文章——第68天:求最大公約數(shù)(使用三種方法))
【不考慮負數(shù),求負數(shù)的最小公倍數(shù)本就是無意義的(相當(dāng)于求兩個正數(shù)的最大公倍數(shù))】
#include <stdio.h> /** * @brief 獲取兩個正整數(shù)的最大公因數(shù)(輾轉(zhuǎn)相除法) * @param num1 第一個正整數(shù) * @param num2 第二個正整數(shù) * @return 最大公因數(shù) */ int Get_Max_Comm_Divisor(int num1, int num2) { int remainder = num1 % num2; //余數(shù) while(remainder != 0) { num1 = num2; //更新被除數(shù) num2 = remainder; //更新除數(shù) remainder = num1 % num2; //更新余數(shù) } return num2; //最后的除數(shù)即為最大公因數(shù) } /** * @brief 獲取最小公倍數(shù)(定理法) * @param num1 第一個正整數(shù) * @param num2 第一個正整數(shù) * @return 返回最小公倍數(shù) */ int Get_Min_Comm_Multiple(int num1, int num2) { /* 最小公倍數(shù) = 兩數(shù)相乘 / 最大公因數(shù) */ return num1 * num2 / Get_Max_Comm_Divisor(num1, num2); } int main() { int num1 = 0, num2 = 0; printf("請輸入兩個正整數(shù)\n"); scanf("%d%d", &num1, &num2); printf("它們的最小公倍數(shù)為:%d\n", Get_Min_Comm_Multiple(num1, num2)); return 0; }
運行結(jié)果
如果程序不作處理(不檢測輸入的數(shù)字是否為正數(shù)),此時輸入負數(shù),也能返回一個公倍數(shù),但不是“最小”公倍數(shù),不過求負數(shù)的最小公倍數(shù)本就是無意義的(相當(dāng)于求兩個正數(shù)的最大公倍數(shù))。
原文鏈接:https://blog.csdn.net/weixin_43772810/article/details/122064989
相關(guān)推薦
- 2023-06-21 ProtoBuf動態(tài)拆分Gradle?Module解析_Android
- 2024-07-18 Spring Security之基于方法配置權(quán)限
- 2023-03-26 WPF實現(xiàn)頁面的切換的示例代碼_C#教程
- 2023-03-30 C/C++經(jīng)典楊輝三角問題解決方案_C 語言
- 2022-03-01 iview表格中 colums中使用render函數(shù)的幾種總結(jié)
- 2022-12-26 C++內(nèi)存分區(qū)模型超詳細講解_C 語言
- 2022-12-12 React?中state與props更新深入解析_React
- 2022-07-02 Python?matplotlib繪圖時使用鼠標滾輪放大/縮小圖像_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支