美文网首页
Python解中国剩余定理(孙子定理)

Python解中国剩余定理(孙子定理)

作者: redexpress | 来源:发表于2018-04-04 20:22 被阅读631次

中国剩余定理(Chinese Remainder Theorem,CRT)又称孙子定理,是数论中的一个定理。
古典数学问题:有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?
白话文就是:某物的数量除以3余2,除以5余3,除以7余2,某物的数量是多少?

#!/usr/bin/env python
from functools import reduce


def egcd(a, b):
    """扩展欧几里得"""
    if 0 == b:
        return 1, 0, a
    x, y, q = egcd(b, a % b)
    x, y = y, (x - a // b * y)
    return x, y, q


def chinese_remainder(pairs):
    """中国剩余定理"""
    mod_list, remainder_list = [p[0] for p in pairs], [p[1] for p in pairs]
    mod_product = reduce(lambda x, y: x * y, mod_list)
    mi_list = [mod_product//x for x in mod_list]
    mi_inverse = [egcd(mi_list[i], mod_list[i])[0] for i in range(len(mi_list))]
    x = 0
    for i in range(len(remainder_list)):
        x += mi_list[i] * mi_inverse[i] * remainder_list[i]
        x %= mod_product
    return x


if __name__=='__main__':
    print(chinese_remainder([(3, 2), (5, 3), (7, 2)]))

相关文章

  • Python解中国剩余定理(孙子定理)

    中国剩余定理(Chinese Remainder Theorem,CRT)又称孙子定理,是数论中的一个定理。古典数...

  • 中国剩余定理

    昨天下午同事给我出了一到题目: 一筐鸡蛋,1个1个拿,拿完;2个2个拿,剩余1个;3个3个拿,拿完;4个4个拿,剩...

  • 中国剩余定理

    中国剩余定理给出了求解模数两两互质的线性同余方程组的一个特解。设是两两互质的整数,,,是线性同余方程的一个解。对于...

  • 中国剩余定理

    用中国剩余定理求解同于式组 / x≡b1 (mod m1)| x≡b2 (mod m2)| x≡b3 (mod m...

  • 中国剩余定理

    下表由本人制作,与上表字符含义不同,切勿混淆

  • 中国剩余定理

    表述 设为互素的整数,b与c为任意整数。那么同余式组:恰好有一个解。 证明 等价于,带入得。根据线性同余式定理,上...

  • 数论四大定理

    威尔逊定理、欧拉定理、孙子定理、费马小定理

  • CRT中国剩余定理

    特别版(除数两两互质) 普通版(任意情况)两两合并变成互质情况。

  • 中国剩余定理(CRT)

    在《孙子算经》中有这样一个问题:“今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之...

  • 产品经理数学课(3)

    关键词:剩余,同余定理,数论,hash 参考:杨迎球,中国剩余定理与同余式组,[D]安顺学院数学与计算机科学系,2...

网友评论

      本文标题:Python解中国剩余定理(孙子定理)

      本文链接:https://www.haomeiwen.com/subject/vtrlhftx.html