P4777 【模板】扩展中国剩余定理(EXCRT)

excrt模板

我们知道,crt无法处理模数不两两互质的情况

然鹅excrt可以

设当前解到第 i 个方程

设$M=\prod_{j=1}^{i-1}b[j]$ ,$ res$是前$ i-1 $个方程的最小解

则$ res+x*M$ 是前 $i-1 $个方程的通解

那么我们求的就是

$res+x*M ≡ a[i] (mod b[i])$

$<=> x*M - y*b[i] = a[i]-res$

用exgcd求出的解为 t (当且仅当 gcd(M,b[i])∣t 时有解)

x的一个解=$ t /gcd(M,b[i])*(a[i]-res)$

最小解=$ x\%( b[i] / gcd(M,b[i]) )$

∴$res=(res+x*M)\%( M=M*b[i] )$

如此递推

end.

poj2891 有多组数据,请自行修改(poj只能用 I64d 来着(大雾))

#include<cstdio>
#include<cctype>
using namespace std;
typedef long long ll;
char c;template<typename T>void read(T &x){
c=getchar(); x=;
while(!isdigit(c)) c=getchar();
while(isdigit(c)) x=(x<<)+(x<<)+(c^),c=getchar();
}
ll mod(ll x,ll p) {return x< ?x+p:x;}
ll mul(ll x,ll y,ll p){
ll tmp=x*y-(ll)((long double)x/p*y+1.0e-8)*p;
return mod(tmp,p);
}ll g,a[],b[];
void exgcd(ll a0,ll b0,ll &x,ll &y){
if(!b0) x=,y=,g=a0;
else exgcd(b0,a0%b0,y,x),y-=x*(a0/b0);
}int n;
ll excrt(){
ll res=a[],M=b[],x,y,c,t,B;
for(int i=;i<=n;++i){
B=b[i];
c=mod((a[i]-res)%B,B);
exgcd(M,B,x,y); t=B/g;
if(c%g) return -;
x=mul(x,c/g,t=B/g); 快速乘取模
res+=x*M; M*=t;
res=mod(res%M,M);
}return res;
}
int main(){
read(n);
for(int i=;i<=n;++i) read(b[i]),read(a[i]);
printf("%lld",excrt());
return ;
}

P4777 【模板】扩展中国剩余定理(EXCRT)/ poj2891 Strange Way to Express Integers的更多相关文章

  1. 中国剩余定理+扩展中国剩余定理 讲解+例题(HDU1370 Biorhythms + POJ2891 Strange Way to Express Integers)

    0.引子 每一个讲中国剩余定理的人,都会从孙子的一道例题讲起 有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二.问物几何? 1.中国剩余定理 引子里的例题实际上是求一个最小的x满足 关键是,其中 ...

  2. 扩展中国剩余定理 (exCRT) 的证明与练习

    原文链接https://www.cnblogs.com/zhouzhendong/p/exCRT.html 扩展中国剩余定理 (exCRT) 的证明与练习 问题模型 给定同余方程组 $$\begin{ ...

  3. 中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结

    中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结 标签:数学方法--数论 阅读体验:https://zybuluo.com/Junlier/note/1300035 前置浅讲 前 ...

  4. 扩展中国剩余定理 (ExCRT)

    扩展中国剩余定理 (ExCRT) 学习笔记 预姿势: 扩展中国剩余定理和中国剩余定理半毛钱关系都没有 问题: 求解线性同余方程组: \[ f(n)=\begin{cases} x\equiv a_1\ ...

  5. [poj2891]Strange Way to Express Integers(扩展中国剩余定理)

    题意:求解一般模线性同余方程组 解题关键:扩展中国剩余定理求解.两两求解. $\left\{ {\begin{array}{*{20}{l}}{x = {r_1}\,\bmod \,{m_1}}\\{ ...

  6. POJ2891 Strange Way to Express Integers

    题意 Language:Default Strange Way to Express Integers Time Limit: 1000MS Memory Limit: 131072K Total S ...

  7. POJ2891——Strange Way to Express Integers(模线性方程组)

    Strange Way to Express Integers DescriptionElina is reading a book written by Rujia Liu, which intro ...

  8. POJ2891 Strange Way to Express Integers【扩展中国剩余定理】

    题目大意 就是模板...没啥好说的 思路 因为模数不互质,所以直接中国剩余定理肯定是不对的 然后就考虑怎么合并两个同余方程 \(ans = a_1 + x_1 * m_1 = a_2 + x_2 * ...

  9. POJ2891 Strange Way to Express Integers (扩展欧几里德)

    本文为博主原创文章,欢迎转载,请注明出处 www.cnblogs.com/yangyaojia 题目大意 求解一组同余方程 x ≡ r1 (mod a1) x ≡ r2 (mod a2) x ≡ r ...

随机推荐

  1. link元素 rel src href属性

    The SRC and HREF attributes are used to include some external entities like an image, a CSS file, a ...

  2. AbstractQueuedSynchronizer-AQS

    AbstractQueuedSynchronizer,这个类是整个java.util.concurrent的核心之一. CountDownLatch 能够使一个或多个线程等待其他线程完成各自的工作后再 ...

  3. update条件判断更新

    UPDATE cw_party tp, cw_shop tsSET tp.state = 3, ts.bonus_average = CASEWHEN ts.bonus_average > 0 ...

  4. 性能测试yslow

    YSlow YSlow可以对网站的页面进行分析,并告诉你为了提高网站性能,如何基于某些规则而进行优化. YSlow可以分析任何网站,并为每一个规则产生一个整体报告,如果页面可以进行优化,则YSlow会 ...

  5. 有趣的JavaScript隐式类型转换

    JavaScript的数据类型是非常弱的(不然不会叫它做弱类型语言了)!在使用算术运算符时,运算符两边的数据类型可以是任意的,比如,一个字符串可以和数字相加.之所以不同的数据类型之间可以做运算,是因为 ...

  6. luke下载使用

    网上内容太多,下载了却不管用,即使下载了,也不知道怎么用.(对我这种小白来说,大神就一笑而过吧) 下载地址:http://www.xdowns.com/app/253909.html(如若下载不到可以 ...

  7. java核心技术笔记

    1.类和对象 第四章:面向对象 日历的作用是提供某个时间点的信息 查询设置信息:GregorianCalendar now = new GregorianCalendar() int month = ...

  8. java学习(一)--- 基础语法

    学习内容来 自菜鸟教程 http://www.runoob.com/java/java-object-classes.html   Java基础 Java:一个Java程序可以认为是一系列的对象组合, ...

  9. day14 十四、三元运算符,推导式,匿名内置函数

    一.三元(目)运算符 1.就是if...else...语法糖 前提:if和else只有一条语句 # 原来的做法 cmd = input('cmd:>>>') if cmd.isdig ...

  10. SpringMVC+MyBatis+Druid使用MySQL8.0.11版本

    1.使用MySQL8.0.11版本,要使用5.1.45或其他高版本驱动jar包,我本地使用的是最新的8.0.11 2.更换了MySQL驱动后,报Cannot find class [com.aliba ...