網站首頁 編程語言 正文
題目描述
求任意兩個正整數的最小公倍數
問題分析
兩個或多個整數公有的倍數叫做它們的公倍數,其中除0以外最小的一個公倍數就叫做這幾個整數的最小公倍數。整數a,b的最小公倍數記為[a,b],同樣的,a,b,c的最小公倍數記為[a,b,c],多個整數的最小公倍數也有同樣的記號。
.與最小公倍數相對應的概念是最大公約數,a,b的最大公約數記為(a,b)。關于最小公倍數與最大公約數,我們有這樣的定理:(a,b)x[a,b]=ab(a,b均為整數)。
——百度百科
我們可以通過兩個方法求最小公倍數。
第一種是窮舉法,列舉所以可能的數,直到找到最小的公倍數;第二種是使用最小公倍數與最大公約數的一個定理——兩個整數的最小公倍數等于兩數之積除以兩個數的最大公因數,即(a,b)x[a,b]=ab((a,b)表示a和b的最大公約數,[a,b]表示a和b的最小公倍數,a,b均為整數)
方法一:窮舉法
假設有兩個整數num1和num2,這兩個整數的最小公倍數一定大于等于它們的最大值,同時小于等于它們的積。
按從小到大的順序遍歷整個范圍內的所有整數,第一個公因數即為它們的最小公倍數。
【不考慮負數,求負數的最小公倍數本就是無意義的(相當于求兩個正數的最大公倍數)】
#include <stdio.h> /** * @brief 獲取最小公倍數(窮舉法) * @param num1 第一個正整數 * @param num2 第一個正整數 * @return 返回最小公倍數 */ int Get_Min_Comm_Multiple(int num1, int num2) { int i = 0, tmp = 0, mul = 0; tmp = num1 > num2 ? num1 : num2; //獲取最大值 mul = num1 * num2; //兩數之積 for(i = tmp; i <= mul; i++) { //同時為num1和num2的倍數 if(i % num1 == 0 && i % num2 == 0) break; } return i; } int main() { int num1, num2; printf("請輸入兩個正整數\n"); scanf("%d%d", &num1, &num2); printf("它們的最小公倍數為:%d\n",Get_Min_Comm_Multiple(num1, num2)); return 0; }
運行結果
方法二:定理法
使用定理求最小公倍數(兩個整數的最小公倍數等于兩數之積除以兩個數的最大公因數),需要先求出兩個整數的最大公因數,最大公因數這里采用輾轉相除法。(最大公因數的求法可以參考我上一篇文章——第68天:求最大公約數(使用三種方法))
【不考慮負數,求負數的最小公倍數本就是無意義的(相當于求兩個正數的最大公倍數)】
#include <stdio.h> /** * @brief 獲取兩個正整數的最大公因數(輾轉相除法) * @param num1 第一個正整數 * @param num2 第二個正整數 * @return 最大公因數 */ int Get_Max_Comm_Divisor(int num1, int num2) { int remainder = num1 % num2; //余數 while(remainder != 0) { num1 = num2; //更新被除數 num2 = remainder; //更新除數 remainder = num1 % num2; //更新余數 } return num2; //最后的除數即為最大公因數 } /** * @brief 獲取最小公倍數(定理法) * @param num1 第一個正整數 * @param num2 第一個正整數 * @return 返回最小公倍數 */ int Get_Min_Comm_Multiple(int num1, int num2) { /* 最小公倍數 = 兩數相乘 / 最大公因數 */ return num1 * num2 / Get_Max_Comm_Divisor(num1, num2); } int main() { int num1 = 0, num2 = 0; printf("請輸入兩個正整數\n"); scanf("%d%d", &num1, &num2); printf("它們的最小公倍數為:%d\n", Get_Min_Comm_Multiple(num1, num2)); return 0; }
運行結果
如果程序不作處理(不檢測輸入的數字是否為正數),此時輸入負數,也能返回一個公倍數,但不是“最小”公倍數,不過求負數的最小公倍數本就是無意義的(相當于求兩個正數的最大公倍數)。
原文鏈接:https://blog.csdn.net/weixin_43772810/article/details/122064989
相關推薦
- 2022-08-03 python數據類型可變與不可變深入分析_python
- 2022-03-31 C語言16進制與ASCII字符相互轉換_C 語言
- 2022-10-20 python文件數據分析治理提取_python
- 2022-05-08 ASP.NET?MVC對URL匹配操作_實用技巧
- 2022-04-09 Solr 檢索結果集List<SolrDocument> 轉換為指定業務對象總結
- 2022-08-27 Python+matplotlib繪制多子圖的方法詳解_python
- 2022-10-30 Android?動態加載?so實現示例詳解_Android
- 2022-07-17 baselines示例程序train_cartpole.py的ImportError_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支