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. iOS 调试大法

    本文转载至 http://www.jianshu.com/p/d19e19a91071 0.笨办法 看变量.对象?NSLog+重新编译运行:改某对象?改源码+重新编译运行:隔离某个方法?在方法中写 r ...

  2. StringUtils 工具类的常用方法(转载)

    http://guobin6125.iteye.com/blog/1535792

  3. pom.xml文件最详细的讲解

    1 引入额外的jar包 <dependency> <groupId>bitwalker</groupId> <artifactId>UserAgentU ...

  4. Linux ReviewBoard安装与配置

    目录 0. 引言 1. 安装步骤 2. 配置站点 2.1 创建数据库 2.2 开始安装 2.3 修改文件访问权限 2.4 Web服务器配置 2.5 修改django相关配置 正文 回到顶部 0. 引言 ...

  5. python基础类型—列表

    列表 列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如: li = [‘alex’ ...

  6. D2

    Cosmic Cleaner: 为什么大家都知道球缺怎么求,我没听说过啊??? 我真的是印象里今天第一次听说球缺这个东西啊... 我一看,哇,神仙几何题,毫无头绪,投了投了,然后就被过穿了??? tl ...

  7. dede后台目录暴力猜解仅限于windows

    #!/usr/bin/env python '''/* * author = Mochazz * team = 红日安全团队 * env = pyton3 * */ ''' import reques ...

  8. 15.vue动画& vuex

    Vue.config.productionTip = false; ==是否显示提示信息== ==import/export== export xxx 必须跟跟对象或者和定义一起 对象: export ...

  9. git 彻底删除历史记录中的大文件

    Reference 大家一定遇到过在使用Git时,不小心将一个很大的文件添加到库中,即使删除,记录中还是保存了这个文件.以后不管是拷贝,还是push/pull都比较麻烦. === 删除大文件方法 方法 ...

  10. a链接QQ客服 在小框口中打开 感觉不错

    <a href="javascript:;" onClick="javascript:window.open('http://wpa.qq.com/msgrd?v= ...