首页 > 其他分享 >拓展中国剩余定理(EXCRT)

拓展中国剩余定理(EXCRT)

时间:2024-03-06 22:45:15浏览次数:28  
标签:剩余 __ return pmod 定理 EXCRT int128 lcm equiv

普通的 CRT 只能处理模数两两互质的情况,而 EXCRT 可以求得任意情况下同余方程组的通解。

思想:把两个同余方程合并成一个,直到剩下一个。

考虑两个同余方程 \(x\equiv p_1\pmod {m_1},x\equiv p_2\pmod {m_2}\)。

则 \(x=p_1+m_1A=p_2+m_2B\)。移项得 \(m_1A-m_2B=p_2-p_1\)。

这是一个经典的二元一次不定方程,用 exgcd 求出一个 \((A,B)\) 的特解,进而可以求出 \(x\) 的一个特解 \(x_0\)。

定理:若 \(\begin{cases}x\equiv p_1\pmod{m_1}\\x\equiv p_2\pmod{m_2}\end{cases}\) 有特解 \(x_0\),则其通解为 \(x_0+k\cdot lcm(m_1,m_2)\),\(k\in \mathbb{Z}\)。

证明:首先,\(x_0+k\cdot lcm(m_1,m_2)\) 满足同余方程组是显然的。只需要证明为什么没有其他形式的解。也就是为什么模 \(lcm(m_1,m_2)\) 的完全剩余系里,只有余 \(x_0\) 的才有解。

这个问题等价于证明 \(0\sim lcm(m_1,m_2)-1\) 中只有一个有解。

假设有两个解 \(x_1,x_2\),有 \(x_1\equiv x_2\pmod {m_1}\) 和 \(x_1\equiv x_2\pmod{m_2}\),所以 \(lcm(m_1,m_2)\mid (x_1-x_2)\),而 \(x_1,x_2\) 均在 \([0,lcm(m_1,m_2)-1]\) 中,所以 \(x_1=x_2\)。证毕。

所以这两个同余方程可以合并为 \(x\equiv x_0\pmod {lcm(m_1,m_2)}\)。不断合并,直到只剩下一个 \(x\equiv X\),\(X\) 即为最小非负整数解。

点击查看代码
#include <bits/stdc++.h>

using namespace std;
const int N = 1e5 + 5;

inline __int128 read()
{
    __int128 x=0,f=1;
    char ch;
    while(ch>'9'||ch<'0')
    {
        if(ch=='-')f=-1;
        ch=getchar();
    }
    while('0'<=ch&&ch<='9')
    {
        x=x*10+ch-'0';
        ch=getchar();
    }
    return x*f;
}
                        
inline void write(__int128 x)
{
    if(x<0)putchar('-'),x=-x;
    if(x>=10)write(x/10);
    putchar(x%10+'0');
}

int n;
__int128 a[N], b[N];

typedef pair<__int128, __int128> pii;
queue<pii> q;

void exgcd(__int128 a, __int128 b, __int128 &x, __int128 &y) {
	if (b == 0) {
		x = 1, y = 0;
		return ;
	}
	exgcd(b, a % b, x, y);
	__int128 x0 = x, y0 = y;
	x = y0;
	y = x0 - (a / b) * y0;
	return ;
}

__int128 gcd(__int128 a, __int128 b) {
	if (b == 0)
		return a;
	return gcd(b, a % b);
}

__int128 lcm(__int128 a, __int128 b) {
	return a * b / gcd(a, b);
}

void chk() {
	pii f1 = q.front();
	q.pop();
	pii f2 = q.front();
	q.pop();
	__int128 p1 = f1.first, m1 = f1.second, p2 = f2.first, m2 = f2.second;
	if ((p2 - p1) % gcd(m1, m2) != 0) {
		cout << "NIE\n";
		exit(0);
	}
	__int128 g = gcd(m1, m2), A, B;
	exgcd(m1 / g, m2 / g, A, B);
	__int128 t = p1 + (p2 - p1) / g * A * m1 % lcm(m1, m2);
	if (t >= 0)
		q.push(make_pair(t, lcm(m1, m2)));
	else {
		t += lcm(m1, m2);
		q.push(make_pair(t, lcm(m1, m2)));
	}
}

int main() {
	cin >> n;
	for (int i = 1; i <= n; i++) {
		b[i] = read();
		a[i] = read();
		q.push(make_pair(a[i], b[i]));
	}
	for (int i = 1; i < n; i++)
		chk();
	write(q.front().first);
	return 0; 
}

标签:剩余,__,return,pmod,定理,EXCRT,int128,lcm,equiv
From: https://www.cnblogs.com/FLY-lai/p/18057815

相关文章

  • 初三组合恒等式和二项式定理练习 题解
    A.多项式推柿子:\[\begin{aligned}&\sum\limits_{k=0}^{n}b_{k}(x-t)^{k}\\=&\sum\limits_{k=0}^{n}b_{k}\sum\limits_{i=0}^{k}\binom{k}{i}x^{i}(-t)^{k-i}\\=&\sum\limits_{0\leqslanti\leqslantk\leqslantn}\binom{k}{i}b_{......
  • 为什么抽样定理是两倍的关系?
     满足不重叠的条件第二个周期的最小值大于第一个周期的最大值所以Ws-Wm>Wm 必须要带限信号要恢复要框柱一个有限的图形 低通 截取一个,红色的频率要求 ......
  • SDOI2014重建-矩阵树定理、概率
    link:https://www.luogu.com.cn/problem/P3317给一张无向图,每条边有一定概率连通,问整张图恰好构成一棵\(n\)个点的树的概率。输出实数。\(1<n\leq50\)这种问题通常会试着写出来:\[ans=\sum_{T}(\prod_{e\inT}p_e)(\prod_{e\not\inT}(1-p_e))=\prod_{e\inE}(1-p_e)\su......
  • (数论)裴蜀定理
    裴蜀定理内容:${ax+by=c,x\inZ^*,y\inZ^*}$成立的充要条件是${\gcd(a,b)|c}$。$Z^*$表示正整数集。 设${s=\gcd(a,b)}$,显然${s|a}$,并且${s|b}$又因为${x,y\inZ^*}$所以${s|ax,s|by}$显然要使得之前的式子成立,则必须满足$c$是$a$和$b$的公约数的倍数又因为$x$和$y$是......
  • 矩阵树定理
    记结论如果有一条\((i,j)\)的边无向图生成树计数设\(D\)为度数矩阵,\(A\)为邻接矩阵。那么令\(L=D-A\)。则生成树为\(L\)去掉任意一行一列的\(Det(L)\)。mat[i][i]++,mat[j][j]++,mat[i][j]--,mat[j][i]--有向图外向树计数设\(D\)为入度矩阵,\(A\)为邻接矩......
  • 鞅与停时定理
    好高妙!大致思想是给每个局面构造一个势能函数\(F(a_1,a_2,\ldots,a_n)\),使得\(\sumE(F(a'_1,a'_2,\ldots,a'_n))-E(F(a_1,a_2,\ldots,n))=-1\),其中\(a'\)取遍\(a\)的后继状态。这样我们就能直接用终态的势能函数减去初始态的势能函数计算期望,即答案为\(E(S)......
  • 英伟达gpu查看显存剩余
    我使用tmux常常将一块屏幕的四分之一用于观察gpu利用率和显存剩余,但是如果我使用nvidia-smi就会显示不全,因为我有10块gpu。我想了想,直接使用nvidia-smi显示的信息很多是我不需要的,我只需要gpu-id号,显存剩余,显存总量,gpu利用率就这些,那么我们可以设置只显示这些:nvidia-smi--query......
  • 【计算机网络】物理层重要公式:奈氏准则&香农定理
    奈氏准则&香农定理失真影响失真程度的因素:1.码元传输速率2.信号传输距离3.噪声干扰4.传输媒体质量码间串扰码间串扰指接收端收到的信号波形失去了码元之间清晰界限的现象。信道带宽:最高频-最低频。超过的部分发生码间串扰,小于的部分发生失真?奈氏准则奈氏准则在理想......
  • 获取当天剩余时间
     概述业务测试的过程中,本来有一个时间函数“获取当天剩余时间”,其中使用了localtime()和mktime(),但是在压力测试的过程中发现,两个time函数都不是线程安全的,多线程并发的时候会产生一些随机的错误,结果就是获得的interval时间错误,进而影响到业务流程。环境centos:CentOS rele......
  • 数学笔记(1)-勾股定理与勾股数
    勾股定理,是一个基本的几何定理,指直角三角形的两条直角边的平方和等于斜边的平方。中国古代称直角三角形为勾股形,并且直角边中较小者为勾,另一长直角边为股,斜边为弦,所以称这个定理为勾股定理,也有人称商高定理。勾股定理现约有500种证明方法,是数学定理中证明方法最多的定理之一。勾......