备战蓝桥杯Day32 - 欧几里得算法

求最大公约数

约数:如果整数a能被整数b整除,那么a叫做b的倍数,b叫做a的约数。

给定两个整数a,b,两个数的所有公共约数中的最大值即为最大公约数 (Greatest Common Divisor,GCD)。

它的基本思想是:对于整数a和b,利用辗转相除法,反复将a和b相除并取余数 ,直到余数为0为止。此时,非零的余数即为a和b的最大公约数。

该算法的原理可以用公式gcd(a,b) = gcd(b,a mod b)来表示,其中gcd表示最大公约数,mod表示取余操作。算法从a和b开始,反复进行取余操作,直到余数为0,此时的除数即为最大公约数。

代码实现

递归实现:

python 复制代码
def gcd(a, b):
    if b == 0:
        return a
    else:
        return gcd(b, a % b)

print(gcd(12,16))

非递归实现:

python 复制代码
def gcd(a, b):
    while b != 0:
        r = a % b
        a = b
        b = r
    return a

print(gcd(12,16))

分数计算

通过欧几里得算法,可以实现分数的约分和通分,从而实现分数的运算。

一个分数,分子分母上下同时约分的实现

python 复制代码
 def __init__(self, a, b):
        self.a = a
        self.b = b
        x = self.gcd(a, b)
        self.a /= x
        self.b /= x

求分母的最小公倍数方法:

python 复制代码
    def zgs(self, a,  b):
        x = self.gcd(a, b)
        return a * b / x

实现分数加法

python 复制代码
class Fraction:
    def __init__(self, a, b):  # 分子分母同时约分
        self.a = a
        self.b = b
        x = self.gcd(a, b)
        self.a /= x
        self.b /= x

    def gcd(self, a, b):  # 求最大公约数
        while b != 0:
            r = a % b
            a = b
            b = r
        return a

    def zgs(self,a,  b):  # 求最小公倍数
        x = self.gcd(a,b)
        return a*b/x

    def __add__(self, other):  # 加法实现
        a = self.a
        b = self.b
        c = other.a
        d = other.b
        fenmu = self.zgs(b, d)
        fenzi = a * fenmu / b + c * fenmu / d
        return Fraction(fenzi, fenmu)

    def __str__(self):  # 打印分数
        return "%d/%d" % (self.a, self.b)

# 测试案例
a = Fraction(1,3)
b = Fraction(1,2)
print(a+b)
相关推荐
叼烟扛炮1 小时前
C++ 知识点18 内部类
开发语言·c++·算法·内部类
YOGOD有神1 小时前
用AI自动从谷歌地图抓取海外客户,我跑了一次7小时的任务,结果出乎意料
算法
汉克老师1 小时前
GESP5级C++考试语法知识(十五、分治算法(二))
c++·算法·排序算法·分治算法·gesp5级·gesp五级
快瞳科技1 小时前
小样本学习在珍稀鸟类识别中的突破:仅需5张图,让AI认识濒危物种
算法
汉克老师2 小时前
GESP6级C++考试语法知识(五、格雷码)
c++·算法·位运算·异或·gesp6级·gesp六级·格雷码
Ulyanov2 小时前
《从质点到位姿:基于Python与PyVista的导弹制导控制全栈仿真》: 可视化革命——基于 PyVista 的 3D 战场构建与实时渲染
开发语言·python·算法·3d·系统仿真
,,?!,2 小时前
数据结构算法-排序算法
数据结构·算法·排序算法
小白编程锤炼2 小时前
深入解析:质量门禁
人工智能·算法·架构·vibe-coding
yongui478343 小时前
基于 GA 优化的 BP 神经网络算法分析与 MATLAB 实现
神经网络·算法·matlab
Raink老师4 小时前
【AI面试临阵磨枪-54】如何监控 AI 系统:成功率、延迟、Token 消耗、幻觉率、调用量
人工智能·面试·职场和发展