20240112公约数与公倍数

2024-01-12 14:12

本文主要是介绍20240112公约数与公倍数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

代码


def gcd(x, y):while y:x, y = y, x % yreturn xdef lcm(x, y):return x * y // gcd(x, y)num1 =12 
num2=18
print(gcd(num1,num2))   # 6
print(lcm(num1,num2))   #36

概念

公约数
在数学中,两个或多个整数的公约数是能够整除它们的正整数。换句话说,一个数的公约数是能够同时整除这个数和另一个数的数。例如,考虑数字18和24,它们的公约数包括:

  1. 1:因为1可以整除任何数。
  2. 2:因为18和24都可以被2整除。
  3. 3:因为18可以被3整除。
  4. 6:因为18和24都可以被6整除。

因此,1、2、3和6都是18和24的公约数。公约数中最大的一个称为最大公约数(GCD,Greatest Common Divisor)。

如果两个或多个数的最大公约数是1,这些数被称为互质数。互质数是指它们之间没有共同因数(除了1)。例如,5和7是互质数,因为它们的最大公约数是1。

公倍数
在数学中,两个或多个整数的公倍数是能够同时整除这些整数的最小正整数。换句话说,一个数的公倍数是能够同时整除这个数和其他数的数。

考虑两个整数 a 和 b,它们的公倍数包括:

  1. 0:因为0可以整除任何数。
  2. a:因为 a 能整除 a。
  3. b:因为 b 能整除 b。
  4. a * b:因为 a * b 能整除 a 和 b。
  5. 2 * a:因为 2 * a 能整除 a。
  6. 2 * b:因为 2 * b 能整除 b。

以此类推,所有能够同时整除 a 和 b 的整数都是它们的公倍数。而其中最小的正整数是它们的最小公倍数(LCM,Least Common Multiple)。

例如,考虑整数4和6。它们的公倍数包括 0、4、6、8、12、16、18 等,而它们的最小公倍数是12。因为12是能够同时整除4和6的最小正整数。

代码功能

gcd- 计算两个数的最大公约数

lcm-计算两个数的最小公倍数

代码解释

gcd的循环

  1. 条件: 循环的条件是 while y,即当 y 不等于0时,继续执行循环。
  2. 循环体: 在每一轮循环中,执行 x, y = y, x % y,这是一个元组解包操作。这一步是欧几里德算法的关键。它将 x 更新为原来的 y,同时将 y 更新为 x 除以 y余数
  3. 重复: 循环会一直执行,直到 y 的值为0。当 y 为0时,循环结束,此时 x 的值即为最大公约数。

欧几里德算法的核心思想是反复用较小的数取代较大的数,直到较大的数变为0。最终,非零的较小数就是最大公约数。这个算法在每一步都通过取余操作实现,同时不断更新两个数的值。这样的处理方式更加高效,因为它避免了直接的除法操作。

lcm公倍数的计算

两个整数 xy 的乘积等于它们的最大公约数与最小公倍数的积。所以,通过这个关系,可以用最大公约数来计算最小公倍数。

这篇关于20240112公约数与公倍数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/598132

相关文章

【编程基础C++】素数判定、最小公倍数与最大公因数的实现方法

文章目录 素数法一法二 最大公因数辗转相除法另一写法 最小公倍数直接枚举法根据GCD算LCM 素数 素数 是指大于1的自然数,且只能被1和自身整除。例如,2、3、5和7都是素数。它们在数学中非常重要,因为任何大于1的自然数都可以唯一地表示为素数的乘积,这被称为素数分解。 法一 #include <iostream>using namespace std;bool IsPr

HDU 1108(最小公倍数)

题意:如题。 #include <iostream>#include <vector>using namespace std;int dd(int x, int y);void main(){vector<vector<int> > tmpbox;unsigned int a;unsigned int b;while (cin >> a >> b){if (a > 100

蓝桥杯 核桃的数量 (三个数以上的最小公倍数)

问题描述 小张是软件项目经理,他带领3个开发组。工期紧,今天都在加班呢。为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑)。他的要求是: 1. 各组的核桃数量必须相同 2. 各组内必须能平分核桃(当然是不能打碎的) 3. 尽量提供满足1,2条件的最小数量(节约闹革命嘛) 输入格式 输入包含三个正整数a, b, c,表示每个组正在加班的人数,用空格分开(a,b,c<30) 输出格式

最大公约数和最小公倍数(gcd)

GCD算法在ACM算法中不是很常见,但是遇上了不会写也不行,我看过递归的gcd算法,感觉数据一大,可能会崩溃,不如循环快,所以总结一个模板: #include <stdio.h>#include <stdlib.h>#include <string.h>int gcd(int a, int b){int r;while(b!=0){r=b;b=a%b;a=r;}return a;}i

[Algorithm][综合训练][求最小公倍数][跳台阶][最长回文子串]详细讲解

目录 1.求最小公倍数1.题目链接2.算法原理详解 && 代码实现 2.跳台阶1.题目链接2.算法原理详解 && 代码实现 3.最长回文子串1.题目链接2.算法原理详解 && 代码实现 1.求最小公倍数 1.题目链接 求最小公倍数 2.算法原理详解 && 代码实现 最小公倍数:两数乘积 / 最大公因数最大公因数:辗转相除法 原理:GCD(a, b) == GCD(

水题HDU1108 最小公倍数

最小公倍数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3551 Accepted Submission(s): 2562  Problem Description 给定两个正整数,计算这两个数的最小公倍数。 Input 输入

059、Python 函数练习:用函数实现求两个数的最大公约数和最小公倍数

普及:写程序有两个终极原则:高内聚,低耦合。 所谓高内聚指的是一个模块或类内部各个元素(方法、属性等)彼此关联紧密,共同完成一个特定的任务或目标。具有高内聚的模块或类内的元素之间联系紧密,功能相关联,实现单一功能的代码集中在一起。 所谓低耦合指的是模块或类之间的依赖关系尽可能地降低,模块之间通过接口进行通信,各模块之间独立性强,一个模块的改动不会对其他模块造成较大影响。低耦合的设计使得系统更容

最大公约数、最小公倍数【模板】

最大公约数、最小公倍数性质: 1.若a | m,b | m,则lcm(a,b) | m。 2.若d | a,d | b,则d | gcd(a,b)。 3.lcm(a,b) = a * b / gcd(a,b)。 4.设m,a,b是正整数,则lcm(m*a,m*b) = m * gcd(a,b) 5.若m是非零整数a1,a2,…,an的公倍数,则lcm(a1,a2,…,an) | m。

C编程--输入两个数,输出他们的最小公倍数

#include <stdio.h> #include <stdlib.h> int main() {     int a,b,c;     scanf("%d%d",&a,&b);     c = a*b;     while(a!=b)     {         if(a>b)             a=a-b;         else

hdoj Least Common Multiple--最大公约数和最小公倍数

解题思路:求两个数的最小公倍数=两个数相乘,再处理最大公约数。最大公约数用辗转相除术。 最大公约数和最小公倍数说明见下面连接: https://jingyan.baidu.com/article/0964eca21e03ac8285f53602.html http://blog.csdn.net/qq_31828515/article/details/51812154 #include <