目录

  • 中国剩余定理CRT
  • 扩展中国剩余定理ExCRT

TJOI2009 猜数字

HDU 1573 X问题



中国剩余定理CRT

中国剩余定理是用来求线性同于方程组的。
\[ \begin{aligned} \left \{ \begin{matrix} x \equiv c_1 (mod \,\,m_1 )\\ x \equiv c_2 (mod \,\,m_2 )\\ ...\\ x \equiv c_n(mod \,\, m_n) \end{matrix} \right. \end{aligned} \]
中国剩余定理是这样来的。

我们先考虑如下几个方程组:
\[ \begin{aligned}\left \{ \begin{matrix} x_1 \equiv 1 (mod \,\,m_1 )\\ x_1 \equiv 0 (mod \,\,m_2 )\\...\\x_1 \equiv 0(mod \,\, m_n)\end{matrix} \right.,\left \{ \begin{matrix}x_2 \equiv 0 (mod \,\,m_1 )\\x_2 \equiv 1 (mod \,\,m_2 )\\...\\x_2 \equiv 0(mod \,\, m_n)\end{matrix} \right.,\left \{ \begin{matrix}x_n \equiv 0 (mod \,\,m_1 )\\x_n \equiv 0 (mod \,\,m_2 )\\...\\x_n \equiv 1(mod \,\, m_n)\end{matrix} \right.\end{aligned} \]
那么,在\(gcd(m1,m2,...,m_n)\)时,就显然有如下结论:


\[ \begin{aligned} \prod_{i \neq 1} m_i x_1' & \equiv 1(mod \,\, m_1)\\ \prod_{i \neq 2} m_i x_2' & \equiv 1(mod \,\, m_2)\\ \prod_{i \neq n} m_i x_n' & \equiv 1(mod \,\, m_n)\\ \end{aligned} \]
那么
\[ \begin{aligned} x_1 & =x_1'\prod_{i\neq 1} m_i \\ x_2 & =x_2'\prod_{i\neq 2} m_i \\ x_n & =x_n'\prod_{i\neq n} m_i \\ \end{aligned} \]
然后最终的结果就是
\[ x=\sum_{i=1}^nc_ix_i+k\prod_{i=1}^nm_i \]
那么程序就比较好写啦。

TJOI2009 猜数字

#include <bits/stdc++.h>
#define LL long long
using namespace std;LL n;
LL A[ 20 ], B[ 20 ];
LL M, Ans, T[ 20 ];LL QM( LL x, LL y ) {LL Ans = 0;for( ; y; y >>= 1, x = x * 2 % M ) if( y & 1 ) Ans = ( Ans + x ) % M;return Ans;
}void Expower( LL a, LL b, LL &x, LL &y ) {if( b == 0 ) {x = 1; y = 0; return;}Expower( b, a % b, y, x );y -= a / b * x;return;
}LL INV( LL a, LL b ) {LL x, y;Expower( a, b, x, y );if( x < 0 ) x += b;return x;
}int main() {scanf( "%lld", &n );for( LL i = 1; i <= n; ++i ) scanf( "%lld", &A[ i ] );for( LL i = 1; i <= n; ++i ) scanf( "%lld", &B[ i ] );for( LL i = 1; i <= n; ++i ) A[ i ] %= B[ i ];M = 1;for( LL i = 1; i <= n; ++i ) M *= B[ i ];for( LL i = 1; i <= n; ++i ) T[ i ] = QM( INV( M / B[ i ], B[ i ] ), ( M / B[ i ] ) );Ans = 0;for( LL i = 1; i <= n; ++i ) Ans = ( Ans + QM( A[ i ], T[ i ] ) ) % M;printf( "%lld\n", Ans );return 0;
}

扩展中国剩余定理ExCRT

刚才提到,中国剩余定理适用于模数互质的时候。要是模数不互质,那么就需要用到扩展中国剩余定理。

ExCRT是这样工作的:

我们先观察两个线性同余方程组:
\[ \begin{aligned} x & \equiv c_1 (mod\,\,m_1)\\ x & \equiv c_2 (mod\,\,m_2) \end{aligned} \]
我们将它写成这种形式:
\[ \begin{aligned} x & =c_1+k_1m_1 \\ x & =c_2+k_2m_2 \end{aligned} \]
联立后得到:
\[ \begin{aligned} c_1+k_1m_1 &=c_2+k_2m_2\\ \Rightarrow k_1m_1-k_2m_2&= c_2-c_1 \end{aligned} \]
由裴蜀定理得,方程有解的充要条件是\(gcd(m_1,m_2)|(c_2-c_1)\)。

这样的话,我们又可以得到:
\[ \begin{aligned} &k_1\frac{m_1}{gcd(m_1,m_2)}-k_2\frac{m_2}{gcd(m_1,m_2)}=\frac{c_2-c_1}{gcd(m_1,m_2)}\\ \Rightarrow &k_1\frac{m_1}{gcd(m_1,m_2)}\equiv \frac{c_2-c_1}{gcd(m_1,m_2)}\,\,(mod\,\, \frac{m_2}{gcd(m_1,m_2)})\\ \Rightarrow & k_1\equiv\frac{c_2-c_1}{gcd(m_1,m_2)}\times(\frac{m_1}{gcd(m_1,m_2)})^{-1} \,\,(mod\,\,\frac{m_2}{gcd(m_1,m_2)}) \end{aligned} \]
然后将\(k_1\)代回\(x=c_1+k_1m_1\)中,得到
\[ x\equiv\frac{c_2-c_1}{gcd(m_1,m_2)}\times (\frac{m_1}{gcd(m_1,m_2)})^{-1}\times m_1+c_2\,\,(mod \,\, \frac{m_2}{gcd(m_1,m_2)}) \]
我们又得到了一个形如\(x\equiv c \,\,(mod\,\,m)\)的线性同余方程。所以迭代求解即可。

HDU 1573 X问题

#include <bits/stdc++.h>
#define LL long long
using namespace std;const int Maxm = 20;void Work();int main() {int TestCases;scanf( "%d", &TestCases );for( ; TestCases; --TestCases ) Work();return 0;
}int N, M, A[ Maxm ], B[ Maxm ];
struct equation {LL A, B;
};
equation T1, T2;LL GCD( LL x, LL y ) {LL m = x % y;while( m ) {x = y; y = m; m = x % y;}return y;
}void ExGCD( LL a, LL b, LL &x, LL &y ) {if( b == 0 ) {x = 1; y = 0; return;}ExGCD( b, a % b, y, x );y -= a / b * x;return;
}LL Inv( LL a, LL b ) {LL x, y;ExGCD( a, b, x, y );if( x < 0 ) x += b;return x;
}equation ExCRT( equation X, equation Y ) {LL Gcd = GCD( X.A, Y.A );if( ( Y.B - X.B ) % Gcd ) return ( equation ) { 0, 0 };LL A = X.A * Y.A / Gcd;LL B = Inv( X.A / Gcd, Y.A / Gcd ) * ( Y.B - X.B ) / Gcd % ( Y.A / Gcd ) * X.A + X.B;return ( equation ) { A, B };
}void Work() {scanf( "%d%d", &N, &M );for( int i = 1; i <= M; ++i ) scanf( "%d", &A[ i ] );for( int i = 1; i <= M; ++i ) scanf( "%d", &B[ i ] );T1 = ( equation ) { A[ 1 ], B[ 1 ] };for( int i = 2; i <= M; ++i ) {T2 = ( equation ) { A[ i ], B[ i ] };T1 = ExCRT( T1, T2 );if( !T1.A ) {printf( "0\n" );return;}}if( T1.B < 0 ) T1.B += T1.A;if( T1.B > N ) {printf( "0\n" );return;}if( T1.B ) printf( "%d\n", ( int ) ( ( N - T1.B ) / T1.A + 1 ) ); else printf( "%d\n", ( int ) ( N / T1.A ) );return;
}

转载于:https://www.cnblogs.com/chy-2003/p/11458559.html

中国剩余定理及扩展中国剩余定理相关推荐

  1. 中国剩余定理与扩展中国剩余定理

    中国剩余定理又名孙子定理 用来求解同余线性方程组 其中m1,m2,m3-两两互质,求x的最小整数解: 设M为m1,m2,m3-的公倍数. 根据上面的推导,为什么x的通解形式是累加呢? 根据上面推导,推 ...

  2. 博客处女作:中国剩余定理与扩展中国剩余定理

    各位好啊,这里是蒟蒻gigo_64的第一篇博客,,这里我们开始啦. 本文需要读者知晓扩展欧几里得,如果不会请点击这个大佬的链接;https://blog.csdn.net/sslz_fsy/artic ...

  3. 中国剩余定理以及扩展中国剩余定理

    中国剩余定理必须有两两互质的条件:而扩展中国剩余定理没有限制(可能互质,也能不互质).所以只记忆一个扩展中国剩余定理的板子就行. 代码 #include <iostream> #inclu ...

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

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

  5. 中国剩余定理学习 拓展中国剩余定理

    中国剩余定理学习 && 拓展中国剩余定理 中国剩余定理: 拓展中国剩余定理: 中国剩余定理: 仅供自己复习时查看一下大佬笔记,详细学习过程在大佬的博客. 学习连接:https://ww ...

  6. 【原创】 中国剩余定理 和 拓展中国剩余定理

    孙子 Preface 数论学习Part 7. 每天进步一点点,退役不会太丢脸. 联赛只剩十五天,隔靴搔痒智何添? 剩余定理四天一篇,动归图论又几何,数据结构似云烟. 莫再等闲,莫忘时间. CRT 我们 ...

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

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

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

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

  9. 中国剩余定理扩展中国剩余定理

    中国剩余定理(CRT): 若 m1, m2,...,mk  两两互质,则同余方程组 x≡a1 (mod m1) x≡a2 (mod m2) ------- x≡ak (mod mk) 有整数解,解为 ...

最新文章

  1. π是无理数证明定积分_证明圆周率是无理数很容易?人类花了2000年!
  2. MYSQL查看和修改存储引擎
  3. mysql 5.6压缩安装_MySQL 5.6 for Windows 解压缩版配置安装
  4. java.sql.SQLException: Io 异常: Got minus one from a read call
  5. 快速学习AJAX之三 Ajax实现登陆
  6. mysql 之后_MYSQL登陆完之后如何操作???(新手求助)
  7. mysql数据库面试总结
  8. 友商惭愧不?2000+的手机红米直接干到千元
  9. 最大子序列求和_最大连续子序列和
  10. tekla钢结构算量_BIM钢结构造价怎么做?BIM如何用于钢结构工程量计算?
  11. 设置盒子背景色透明度
  12. 计算机辅助设计课程设计评分标准,CAD考试规则评分标准.doc
  13. windows7修改或删除曾经保存的远程桌面连接的密码
  14. iOS面试题系列之常见算法
  15. 软件构造第一次实验感想总结
  16. 《学会提问-批判性思维指南》--70页原创PPT免费分享 (评论: 学会提问)
  17. 手写数字识别案例、手写数字图片处理
  18. 大一作业HTML网页作业 HTML CSS制作二十四节气网页
  19. JDK各个版本发布时间
  20. CentOS下连VisualSVN服务器时报SSL handshake failed: SSL error: Key usage violation in certificate has been d

热门文章

  1. 【UML】-- 用例图练习题含答案(订餐系统、远程网络教学系统、交互式网络系统)
  2. 新一代信息技术(P56)
  3. 在mfc的图形控件嵌入opencv的图形窗口
  4. 利用GSEA对基因表达数据做富集分析
  5. 运营商2019春招面试经验(广东移动市场岗+湖南联通技术岗)
  6. 如何下载海外平台Vimeo的视频?
  7. CTF密码学-加解密总结
  8. 工业继电器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  9. 飞翔的小鸟--easyx版
  10. KEGG enrichment富集分析我至今搞不懂原因的问题