前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python解中国剩余定理(孙子定理)

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

作者头像
IT架构圈
发布2018-06-01 12:19:11
4K0
发布2018-06-01 12:19:11
举报
文章被收录于专栏:IT架构圈

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

代码语言:javascript
复制
#!/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)]))
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-04-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程坑太多 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档