【洛谷 P4777】 【模板】扩展中国剩余定理(EXCRT)
注意一下::
题目是
\]
我总是习惯性的把a和b交换位置,调了好久没调出来,\(qwq\)。
本题解是按照
$$x≡a_i\pmod {b_i}$$
讲述的,请注意
本题\(m_i\)不一定两两互质,所以中国剩余定理在本题不再适用。
说是扩展中国剩余定理,其实好像和中国剩余定理关系不大。
使用数学归纳法,如果我们已经知道了前\(k-1\)个方程组构成的一个解,记作\(x\),记\(m=\Pi_{i=1}^{k-1}m_i\),则\(x+i*m(i∈Z)\)是前\(k-1\)个方程的通解,如果这个不懂,就得去好好学学同余了。考虑对于第\(k\)个方程,求出一个\(t\),使得
\]
然后
\]
综上,循环\(n\)次即可。
讲一下如何用扩展欧几里德解线性同余方程。
大家都知道(假设大家都知道),\(exgcd\)可以求出方程
\]
的一组整数解。
我们要解的线性同余方程是这样的:
\]
可以写成这个形式:
\]
若方程有解,则
\]
一定成立。题目保证有解,无需特判。
于是我们用扩欧求出
\]
的一组解,然后等式两边同时除以\(gcd\)再乘以\(b\),得
\]
得解。
还有个细节,就是乘的时候会爆long long,而__int128这个东西比赛时是不可用的,所以还是老老实实打快\((gui)\)速乘吧。
其实和快速幂差不多的。
ll Slow_Mul(ll n, ll k, ll mod){
ll ans = 0;
while(k){
if(k & 1) ans = (ans + n) % mod;
k >>= 1;
n = (n + n) % mod;
}
return ans;
}
完整\(AC\)代码:
#include <cstdio>
const int MAXN = 100010;
typedef long long ll;
int n;
ll a[MAXN], b[MAXN], ans, M, x, y;
ll exgcd(ll a, ll b, ll &x, ll &y){
if(!b){ x = 1; y = 0; return a; }
ll d = exgcd(b, a % b, x, y);
ll z = x; x = y; y = z - (a / b) * y;
return d;
}
ll Slow_Mul(ll n, ll k, ll mod){
ll ans = 0;
while(k){
if(k & 1) ans = (ans + n) % mod;
k >>= 1;
n = (n + n) % mod;
}
return ans;
}
int main(){
scanf("%d", &n);
for(int i = 1; i <= n; ++i)
scanf("%lld%lld", &b[i], &a[i]);
ans = a[1];
M = b[1];
for(int i = 2; i <= n; ++i){
ll B = ((a[i] - ans) % b[i] + b[i]) % b[i];
ll GCD = exgcd(M, b[i], x, y);
x = Slow_Mul(x, B / GCD, b[i]);
ans += M * x;
M *= b[i] / GCD;
ans = (ans + M) % M;
}
printf("%lld\n", ans);
return 0;
}
【洛谷 P4777】 【模板】扩展中国剩余定理(EXCRT)的更多相关文章
- [洛谷P4777] [模板] 扩展中国剩余定理
扩展中国剩余定理,EXCRT. 题目传送门 重温一下中国剩余定理. 中国剩余定理常被用来解线性同余方程组: x≡a[1] (mod m[1]) x≡a[2] (mod m[2]) ...... x≡a ...
- 中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结
中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结 标签:数学方法--数论 阅读体验:https://zybuluo.com/Junlier/note/1300035 前置浅讲 前 ...
- 扩展中国剩余定理 (exCRT) 的证明与练习
原文链接https://www.cnblogs.com/zhouzhendong/p/exCRT.html 扩展中国剩余定理 (exCRT) 的证明与练习 问题模型 给定同余方程组 $$\begin{ ...
- 扩展中国剩余定理 (ExCRT)
扩展中国剩余定理 (ExCRT) 学习笔记 预姿势: 扩展中国剩余定理和中国剩余定理半毛钱关系都没有 问题: 求解线性同余方程组: \[ f(n)=\begin{cases} x\equiv a_1\ ...
- 扩展中国剩余定理 exCRT 学习笔记
前言 由于 \(\{\mathrm{CRT}\}\subseteq\{\mathrm{exCRT}\}\),而且 CRT 又太抽象了,所以直接学 exCRT 了. 摘自 huyufeifei 博客 这 ...
- [洛谷P4720] [模板] 扩展卢卡斯
题目传送门 求组合数的时候,如果模数p是质数,可以用卢卡斯定理解决. 但是卢卡斯定理仅仅适用于p是质数的情况. 当p不是质数的时候,我们就需要用扩展卢卡斯求解. 实际上,扩展卢卡斯=快速幂+快速乘+e ...
- 扩展中国剩余定理(EXCRT)快速入门
问题 传送门 看到这个问题感觉很难??? 不用怕,往下看就好啦 假如你不会CRT也没关系 EXCRT大致思路 先考虑将方程组两两联立解开,如先解第一个与第二个,再用第一个与第二个的通解来解第三个... ...
- [Luogu P4777] 【模板】扩展中国剩余定理(EXCRT) (扩展中国剩余定理)
题面 传送门:洛咕 Solution 真*扩展中国剩余定理模板题.我怎么老是在做模板题啊 但是这题与之前不同的是不得不写龟速乘了. 还有两个重点 我们在求LCM的时候,记得先/gcd再去乘另外那个数, ...
- P4777 【模板】扩展中国剩余定理(EXCRT)/ poj2891 Strange Way to Express Integers
P4777 [模板]扩展中国剩余定理(EXCRT) excrt模板 我们知道,crt无法处理模数不两两互质的情况 然鹅excrt可以 设当前解到第 i 个方程 设$M=\prod_{j=1}^{i-1 ...
- P4777 【模板】扩展中国剩余定理(EXCRT)&& EXCRT
EXCRT 不保证模数互质 \[\begin{cases} x \equiv b_1\ ({\rm mod}\ a_1) \\ x\equiv b_2\ ({\rm mod}\ a_2) \\ ... ...
随机推荐
- fastlane自动化打包ipa并发布到firim或者蒲公英
1.打开终端,确保Xcode Command Line Tools 安装了最新版 xcode-select --install 2.安装fastlane sudo gem install -n /us ...
- 【多线程】 Task
[多线程] Task 一. 常用方法: 1. ContinueWith : 当前 Task 完成后, 执行传入的 Task 2. Delay : 创建一个等待的 Task,只有在调用 Wait 方法时 ...
- ionic 入口禁止加载其他页面
.state('memberOrders', { prefetchTemplate: false, url: '/memberOrders', templateUrl: '/MemberOrders' ...
- Sumsets 递推
Sumsets Time Limit : 6000/2000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submi ...
- redis-Windows下安装与操作
Redis windows下安装 1.安装 (1)windows把redisbin_x32安装包放在电脑任意的盘里 (2)通过cmd找到对应目录: D\redisbin_x32 (3)开始安装 D\ ...
- JavaScript 面向对象 原型(prototype) 继承
1.对象的概念:无需属性的集合,属性可以为数值,对象或函数,ECMAscript中没有类的概念,这点是javascript与其他面向对象(OO)语言不同的地方. //创建一个自定义对象 var per ...
- 指针C语言
一.PTA实验作业 题目一:6-7输出月份英文名 1.PTA提交列表 2.设计思路和流程图 这题只需补充子函数,定义指针数组month[12],分别从一月到十二月,再定义一个字符,让它为NULL,当输 ...
- 【EasyNetQ】- 使用Future Publish调度事件
许多业务流程要求在将来某个日期安排事件.例如,在与客户进行初次销售联系后,我们可能希望在将来的某个时间安排跟进电话.EasyNetQ可以通过其Future Publish功能帮助您实现此功能.例如,这 ...
- To Chromium之浏览器外框UI(2)
之前一些文章本来是草稿状态,一次性全release出来了,排版上可能看上去不太舒服,等哪一天研究下改改排版. Here继续chromium的UI,看看,浏览器的外壳是怎么被画出来的:) 可以先关注下几 ...
- js 给某个div增加class 样式(三种方式)
第一种: el.setAttribute('class','abc'); <!DOCTYPE HTML> <HTML> <HEAD> <meta c ...