题目链接 [VJ传送门] 题目描述 给你\(a_1...a_n\)和\(m_1...m_n\),求一个最小的正整数\(x\),满足\(\forall i\in[1,n] \equiv a_i(mod \ mi)\). 分析 很显然,中国剩余定理无法解决\(m_i\)之间非互质的问题. 需要用\(exCRT\). 假设\(x\)是前\(k-1\)个方程推出来的答案,那么第一个方程可以直接得出自己的答案就是\(a_1\). 设\(M=lcm(m_1,m_2...m_{k-1})\),那么显然得到\(…
题目大意 就是模板...没啥好说的 思路 因为模数不互质,所以直接中国剩余定理肯定是不对的 然后就考虑怎么合并两个同余方程 \(ans = a_1 + x_1 * m_1 = a_2 + x_2 * m_2\) \(x_1 * m_1 + x_2 * m_2 = a _ 2 - a _ 1\)(因为正负号没影响嘛) 然后就可以exgcd解出来\(x_1, x_2\), 最后就可以得到\(x' = a_1 + x_1 * m_1, m' = lcm(m_1, m_2)\) 然后就不停合并就可以了…
扩展中国剩余定理板子 #include<iostream> #include<cstdio> using namespace std; const int N=100005; int n; long long m[N],r[N],M,R,x,y,d; void exgcd(long long a,long long b,long long &d,long long &x,long long &y) { if(!b) { d=a,x=1,y=0; return…
放一个写的不错的博客:https://www.cnblogs.com/zwfymqz/p/8425731.html POJ好像不能用__int128. #include <iostream> #include <stdio.h> typedef long long ll; const int maxn=1e6+10; ll m[maxn],r[maxn]; void exgcd(ll a,ll b,ll &x,ll &y) { if (b==0) { x=1; y=…
[POJ2891]Strange Way to Express Integers(拓展CRT) 题面 Vjudge 板子题. 题解 拓展\(CRT\)模板题. #include<iostream> #include<cstdio> using namespace std; #define ll long long #define MAX 111111 ll exgcd(ll a,ll b,ll &x,ll &y) { if(!b){x=1,y=0;return a;…
http://poj.org/problem?id=2891 (题目链接) 题意 求解线性同余方程组,不保证模数一定两两互质. Solotion 一般模线性方程组的求解,详情请见:中国剩余定理 细节 注意当最后发现方程无解直接退出时,会导致有数据没有读完,然后就会Re,所以先用数组将所有数据存下来. 代码 // poj2891 #include<algorithm> #include<iostream> #include<cstdlib> #include<cst…
题意: 给出n个模方程x=a(mod r) 求x的最小解 题解: 这就是个线性模方程组的模版题- - 但是有一些要注意的地方 extgcd算出来的解x可能负数  要让x=(x%mo+mo)%mo 而且mo不是等于lcm(r1,r2) 而是r2/gcd(r1,r2) 代码: #include <cstdio> typedef long long ll; ll n,a,r; ll extgcd(ll &x,ll &y,ll a,ll b){ if (!b){ x=,y=; retu…
写一下自己的理解,下面附上转载的:若a==b(modk);//这里的==指的是同余,我用=表示相等(a%k=b)a-b=kt(t为整数)以前理解的错误思想:以前认为上面的形式+(a-tb=k)也是成立的,今天一想随便就能举出一个反例11==5(mod3)同样是求这个东西..X mod m1=r1X mod m2=r2.........X mod mn=rn 首先,我们看两个式子的情况X mod m1=r1……………………………………………………………(1)X mod m2=r2…………………………
http://poj.org/problem?id=2891 题目大意: k个不同的正整数a1,a2,...,ak.对于一些非负m,满足除以每个ai(1≤i≤k)得到余数ri.求出最小的m. 输入和输出中的所有整数都是非负数,可以用64位整数类型表示. —————————————— 首先我们打眼一看可能是孙子定理. 但是我们无法保证a一定互质. 那么显然就要用我们的可爱的exgcd啦! (下面题解根据这位大佬所懂http://blog.csdn.net/zmh964685331/article/…
求解方程组 X%m1=r1 X%m2=r2 .... X%mn=rn 首先看下两个式子的情况 X%m1=r1 X%m2=r2 联立可得 m1*x+m2*y=r2-r1 用ex_gcd求得一个特解x' 得到X=x'*m1+r2 X的通解X'=X+k*LCM(m1,m2) 上式可化为:X'%LCM(m1,m2)=X 到此即完成了两个式子的合并,再将此式子与后边的式子合并,最后的得到的X'即为答案的通解,求最小整数解即可. #include<stdio.h> #include<string.h…