最后的gcd相关!


中国剩余定理是这么一个问题。
“今有物不知其数,三三数之余二,五五数之余三,七七数之余二。问物几何?”
答曰:二十三。口诀:三人同行七十稀,五树梅花廿一枝,七子团圆月正半,除百零五便得知。
嗯,我知道没有看懂。
首先来说一下这题是干啥的。实际上,题目想让解一个线性同余方程组:

⎧⎩⎨x≡2(mod  3)x≡3(mod  5)x≡2(mod  7)

\begin{cases} x\equiv 2 (mod \ \ 3)\\ x\equiv 3 (mod \ \ 5)\\ x \equiv 2 (mod \ \ 7)\end{cases}
古人的做法是这样的:
假设用向量 ⎛⎝⎜100⎞⎠⎟ \left( \begin{matrix} 1\\ 0\\0\end{matrix} \right)表示线性同余方程组 ⎧⎩⎨x≡1(mod  3)x≡0(mod  5)x≡0(mod  7) \begin{cases} x\equiv 1 (mod \ \ 3)\\ x\equiv 0 (mod \ \ 5)\\ x \equiv 0 (mod \ \ 7)\end{cases}
那么我们首先求出 ⎛⎝⎜100⎞⎠⎟ \left( \begin{matrix} 1\\ 0\\0\end{matrix} \right), ⎛⎝⎜010⎞⎠⎟ \left( \begin{matrix} 0\\1\\0\end{matrix} \right), ⎛⎝⎜001⎞⎠⎟ \left( \begin{matrix}0\\ 0\\1\end{matrix} \right)
显然对于 ⎛⎝⎜100⎞⎠⎟ \left( \begin{matrix} 1\\ 0\\0\end{matrix} \right),x应该是35的倍数,即 x≡1(mod  35) x\equiv 1(mod \ \ 35),试一下就知道结果是70.同理, ⎛⎝⎜010⎞⎠⎟ \left( \begin{matrix} 0\\1\\0\end{matrix} \right)=21, ⎛⎝⎜001⎞⎠⎟ \left( \begin{matrix}0\\ 0\\1\end{matrix} \right)=15.
现在我们来看看,原方程组 ⎛⎝⎜232⎞⎠⎟ \left( \begin{matrix} 2\\3\\2\end{matrix} \right)=2 ⎛⎝⎜100⎞⎠⎟ \left( \begin{matrix} 1\\ 0\\0\end{matrix} \right)+3 ⎛⎝⎜010⎞⎠⎟ \left( \begin{matrix} 0\\1\\0\end{matrix} \right)+2 ⎛⎝⎜001⎞⎠⎟ \left( \begin{matrix}0\\ 0\\1\end{matrix} \right)=233.
计算一下3*5*7=105,所以结果就是233%105=23.
不知各位有体会到古人的智慧么?中国剩余定理是这样的:
自然数 m1,m2,m3,...,mn m_1,m_2,m_3,...,m_n两两互质,若N= m1⋅m2⋅m3⋅...⋅mn m_1·m_2·m_3·...·m_n,则方程 ⎧⎩⎨⎪⎪⎪⎪⎪⎪x≡b1(mod  m1)x≡b2(mod  m2)...x≡bn(mod  mn) \begin{cases}x \equiv b_1(mod \ \ m_1)\\ x\equiv b_2(mod \ \ m_2)\\...\\ x\equiv b_n(mod \ \ m_n)\end{cases}在模N同余下有唯一解。
模板:

#include <iostream>
using namespace std;
typedef long long LL;
#define MAXN 10003
LL W[MAXN],B[MAXN],k;//k个方程式表示a同余B[n](mod W[n])
LL exgcd(LL a,LL b,LL &x,LL &y){
    if(!b){        x=1,y=0;
        return a;
    }
    LL gcd=exgcd(b,a%b,x,y);
    LL t=x;
    x=y;
    y=t-a/b*y;
    return gcd;
}
LL china(){
    LL x,y,a=0,m,n=1;
    for(int i=0;i<k;++i) n*=W[i];
    for(int i=0;i<k;++i){        m=n*W[i];
        exgcd(W[i],m,x,y);
        a=(a+y*m*B[i])%n;
    }
    if(a>0) return a;
    else return a+n;
}
int main(){
    cin>>k;
    for(int i=0;i<k;++i)
        cin>>W[i]>>B[i];
    cout<<china();
}

那么如果遇到了非互质的情况怎么办?
http://www.cnblogs.com/Robert-Yuan/p/4646632.html
这是我个人觉得讲的相当好的一篇。因为我自认为没办法讲的比他清楚,这里也就不献丑了。
是不是觉得非常的坑?别担心。


zhx讲了一个非常神奇的方法:大数翻倍法,如果你想找到该方法的科学严谨的定义,可以去参考小学五年级数学奥数书。
这个方法是这样的:首先根据前两个式子得出一个公共的值,从而合并为一个新的式子。翻倍部分的实现如下:

int fanbei(int a1,int p1,int a2,int p2){//p1<p2ans=a2;while(ans % p1 != a1) ans+=p2;return ans;
}

将大数不断加倍直到满足小数的条件,非常神奇,复杂度是玄学的O( ∑an−min(an) \sum a_{n}-min(a_n))
这个方法是具有极强泛用性的,所以可以放心食用,不过……因为是玄学复杂度互质还是用剩余定理吧
难道有人会因为担心卡SPFA专门去写Dijkstra吗!其实是有的orz


那么关于同余和gcd的部分就告一段落了……之后是极为刺激的素数!

基础数论算法(4) 中国剩余定理相关推荐

  1. 密码学基础算法(二)中国剩余定理

    随便谷歌了一个图片做首图 原图地址: http://www.siwapu.com/etagid41968b0/ 密码学基础系列: (一) 基于整数的欧几里得算法和扩展欧几里得算法 (二) 中国剩余定理 ...

  2. 数论常用内容——中国剩余定理

    中国剩余定理 中国剩余定理是中国古代求解一次同余式组(见同余)的方法.是数论中一个重要定理.又称孙子定理. 用现代数学的语言来说明的话,中国剩余定理给出了下图所示的一元线性同余方程组有解的判定条件,并 ...

  3. 密码学基础——辗转相除法,费马小定理,欧拉定理,裴蜀定理,中国剩余定理

    文章主要根据百度百科和维基百科相关相关知识点整理而成! 辗转相除法 辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法.它的具体做法是:用较小数除较大数 ...

  4. 数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法

    打死没想到会在H老师处学懂数论 同余,整除 模运算 埃式筛法 欧拉筛法 最大公约数和最小公倍数 辗转相除法 更相减损术 裴蜀定理 威尔逊定理 费马定理 同余等价类.剩余系.缩系 欧拉函数 欧拉定理 扩 ...

  5. 信息安全基础综合实验-中国剩余定理

    最近没有什么事情,打算把之前的作业整理一下发出来,有需要的学弟学妹们可以参考一下. 相关:某电的密码学实验,信安专业必选实验 实验题目:中国剩余定理 实验目的 (包括实验环境.实现目标等等) 实验环境 ...

  6. 与数论的厮守04:扩展中国剩余定理

    根据数论的尿性,一般的定理解决不了的问题怎么办?那就拓展一下呗. 我们先看中国剩余定理,它解决的是一堆同余方程:nΞa1(mod b1),nΞa2(mod b2)...nΞak(mod bk),其中b ...

  7. 数论 —— 线性同余方程组与中国剩余定理

    [线性同余方程组] 由若干个线性同余方程构成的线性方程组. 例如: 其解法最早由我国<孙子算经>给出,因此解法称为"孙子定理",又叫"中国剩余定理" ...

  8. ACM数论----中国剩余定理与拓展中国剩余定理

    一.问题引入: 在<孙子算经>中有这样一个问题:"今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之剩二(除以7余2),问物几何?"这个问 ...

  9. 扩展欧几里得算法、乘法逆元与中国剩余定理

    文章目录 前言 定义.定理和部分证明 整除 定义 定理 定理的证明 同余 定义 同余的性质 同余的运算律 运算律的证明 扩展欧几里得算法 代码模板 算法详解 乘法逆元 求解逆元 乘法逆元的作用 中国剩 ...

  10. 中国剩余定理matlab程序,中国剩余定理即孙子定理的五种解法

    中国剩余定理即孙子定理的五种解法 -- 学习初等数论心得笔记 2013-10-04 博文2015-12修改 "中国剩余定理"是公元5-6世纪.我国南北朝时期的一部著名算术著作< ...

最新文章

  1. 【机器学习基础】机器学习中“距离与相似度”计算汇总
  2. 二、ceph编译源码、单机搭建调试环境
  3. Error processing line 1 of vision-1.0.0-py3.6-nspkg.pth AttributeError: ‘NoneType‘ object has no
  4. 德佑地产房产经纪人区域总监访谈:有肌肉,更有内涵!
  5. “梧桐杯”中国移动大数据应用创新大赛 - 智慧城市赛道baseline
  6. 计算机编程的计算法,计算方法
  7. 网络模型 OSI七层协议和TCP/IP四层协议
  8. python递归函数分叉树枝_python递归函数绘制分形树的方法
  9. 零基础学Arcgis(十二)地图标注与注记
  10. 老师给我推荐的经典管理书籍
  11. Execl锁定单元格
  12. 八种常见的防盗链方法总结及分析 (转自http://www.cnblogs.com/uubox)
  13. TP3.2中filed和find()使用
  14. loT行业生死竞速:Aqara绿米得用户得天下
  15. matlab信号时序图,怎么看时序图,电路原理图(转)
  16. 回顾Win10自带表情包快捷键
  17. 2020国开c语言程序设计1075,中央电大秋季C语言程序设计期末试卷及答案代码1075,01(7页)-原创力文档...
  18. 惠普LaserJet M1216nfh MFP激光打印机开机提示“安装黑色碳粉盒”亮黄灯
  19. win7下配置FTP服务
  20. 深入理解CDC原理与Debezium数据接入流程和原理

热门文章

  1. linux入门怎么学
  2. fastAPI简单使用
  3. 分离数字的python编码_把数字拆分成2的幂的和
  4. python分解五位数
  5. Android中图片压缩方案详解
  6. 浅谈![CDATA[ ]]
  7. 二叉树的遍历(非递归)整理
  8. 递归算法实例应用(五)
  9. FTP电脑间传输文件
  10. Nacos 修改密码