博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构(python) —— 【35: 欧几里得算法】
阅读量:3942 次
发布时间:2019-05-24

本文共 1295 字,大约阅读时间需要 4 分钟。

欧几里得算法

1. 概念介绍

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

最大公约数(Greatest Common Divisor,GCD): 给定两个整数a,b,两个数的所有公共约数中的最大值
例:12与16的最大公约数是4

如何计算两个数的最大公约数:

  1. 欧几里得:辗转相除法(欧几里得算法)
  2. 《九章算术》: 更相减损术
欧几里得算法:gcd(a,b)= gcd(b, a mod b)例: gcd(60,21)= gcd(21,18)= gcd(18,3)= gcd(3,0)= 3

应用:实现分数计算

利用欧几里得算法实现一个分数类,支持分数的四则运算。

2. 代码

利用欧几里得算法实现一个分数类,支持分数的四则运算

'''TOPIC: 欧几里得算法-实现分数计算author: Bluetime: 2020-08-23QQ: 2458682080'''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):        # 12  16  --> 4        # 3 * 4 * 4 = 48        x = self.gcd(a, b)        return a * b / x    # 分数相加    def __add__(self, other):        # 1/12 + 1/20        a = self.a        b = self.b        c = other.a        d = other.b        # 分母        denominator = self.zgs(b, d)        # 分子        molecule = a * (denominator / b) + c * (denominator / d)        return Fraction(molecule, denominator)    def __str__(self):        return "%d/%d" % (self.a, self.b)# 实现分数的加法a = Fraction(1, 3)  # 1/3b = Fraction(1, 2)  # 1/2print(a + b)  # 1/3 + 1/2

结果为:

5/6

转载地址:http://zdiwi.baihongyu.com/

你可能感兴趣的文章
Linux 关闭/开启图形界面(X-window) 命令
查看>>
debug 打印 开关 设计(for c || C++)
查看>>
vmware中虚拟机和主机ping不通的问题。
查看>>
从“冷却时间”谈产品设计
查看>>
常用shell脚本
查看>>
长网站 转换为 短网址 的原理
查看>>
基于http协议的C语言客户端代码
查看>>
我常用的makefile之产生优秀的.depend文件
查看>>
VMware无法识别USB设备的解决方法 以及 从虚拟机中断开USB设备,使其重新连接到windows主机上
查看>>
linux下C代码、C++代码和命令行方式,完成字符集编码的转换
查看>>
常用shell特殊符号变量一览
查看>>
如何做事
查看>>
架构实践 - 1. 架构风格
查看>>
架构实践 - 3. 基于事件系统的demo
查看>>
架构实践 - 4. 架构设计之进程通信(独立构件风格)
查看>>
架构实践 - 5. 基于进程通信的demo
查看>>
sys/time.h 和 time.h的区别
查看>>
1、蓝牙概述
查看>>
2 系统架构师 - 知识框架
查看>>
Linux下 socket-tcp通信
查看>>