Py学习  »  Python

将egcd公式转换为python

Eakjot Hundal • 5 年前 • 1624 次点击  

试图将这个egcd方程转换成python。

egcd(a, b) = (1, 0), if b = 0
= (t, s - q * t), otherwise, where
q = a / b (note: integer division)
r = a mod b
(s, t) = egcd(b, r)

我使用的测试是egcd(5,37),它应该返回(15,-2),但是返回(19.5,-5.135135135135)

我的代码是:

def egcd(a, b):
    if b == 0:
        return (1, 0)
    else:
        q = a / b # Calculate q
        r = a % b # Calculate r
        (s,t) = egcd(b,r) # Calculate (s, t) by calling egcd(b, r)
        return (t,s-q*t) # Return (t, s-q*t)
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/47168
 
1624 次点击  
文章 [ 2 ]  |  最新文章 5 年前
Samy Bencherif
Reply   •   1 楼
Samy Bencherif    6 年前

改变 q = a / b 对于 q = a // b

ShadowRanger
Reply   •   2 楼
ShadowRanger    6 年前

a / b 在python 3中是“真除法”,结果是不截断浮点除法,即使两个操作数都是 int S.

修复,要么使用 // 相反(这是楼层划分):

q = a // b

use divmod 要同时执行除法和余数运算,请替换这两行:

q = a / b
r = a % b

只有:

q, r = divmod(a, b)