P4777 【模板】扩展中国剩余定理(EXCRT)/ poj2891 Strange Way to Express Integers
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的更多相关文章
- 中国剩余定理+扩展中国剩余定理 讲解+例题(HDU1370 Biorhythms + POJ2891 Strange Way to Express Integers)
0.引子 每一个讲中国剩余定理的人,都会从孙子的一道例题讲起 有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二.问物几何? 1.中国剩余定理 引子里的例题实际上是求一个最小的x满足 关键是,其中 ...
- 扩展中国剩余定理 (exCRT) 的证明与练习
原文链接https://www.cnblogs.com/zhouzhendong/p/exCRT.html 扩展中国剩余定理 (exCRT) 的证明与练习 问题模型 给定同余方程组 $$\begin{ ...
- 中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结
中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结 标签:数学方法--数论 阅读体验:https://zybuluo.com/Junlier/note/1300035 前置浅讲 前 ...
- 扩展中国剩余定理 (ExCRT)
扩展中国剩余定理 (ExCRT) 学习笔记 预姿势: 扩展中国剩余定理和中国剩余定理半毛钱关系都没有 问题: 求解线性同余方程组: \[ f(n)=\begin{cases} x\equiv a_1\ ...
- [poj2891]Strange Way to Express Integers(扩展中国剩余定理)
题意:求解一般模线性同余方程组 解题关键:扩展中国剩余定理求解.两两求解. $\left\{ {\begin{array}{*{20}{l}}{x = {r_1}\,\bmod \,{m_1}}\\{ ...
- POJ2891 Strange Way to Express Integers
题意 Language:Default Strange Way to Express Integers Time Limit: 1000MS Memory Limit: 131072K Total S ...
- POJ2891——Strange Way to Express Integers(模线性方程组)
Strange Way to Express Integers DescriptionElina is reading a book written by Rujia Liu, which intro ...
- POJ2891 Strange Way to Express Integers【扩展中国剩余定理】
题目大意 就是模板...没啥好说的 思路 因为模数不互质,所以直接中国剩余定理肯定是不对的 然后就考虑怎么合并两个同余方程 \(ans = a_1 + x_1 * m_1 = a_2 + x_2 * ...
- POJ2891 Strange Way to Express Integers (扩展欧几里德)
本文为博主原创文章,欢迎转载,请注明出处 www.cnblogs.com/yangyaojia 题目大意 求解一组同余方程 x ≡ r1 (mod a1) x ≡ r2 (mod a2) x ≡ r ...
随机推荐
- ES6 扩展运算符 三点(...)
含义 扩展运算符( spread )是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. console.log(...[, , ]) // 1 2 3 conso ...
- ux.form.field.Year 只能选年的时间扩展
效果如图,亲测6.2.1版本可用,用法同时间选择控件 //只选择年的控件 Ext.define('ux.picker.Year', { extend: 'Ext.Component', alias: ...
- MapReduce Map数 reduce数设置
JobConf.setNumMapTasks(n)是有意义的,结合block size会具体影响到map任务的个数,详见FileInputFormat.getSplits源码.假设没有设置mapred ...
- Linux ReviewBoard安装与配置
目录 0. 引言 1. 安装步骤 2. 配置站点 2.1 创建数据库 2.2 开始安装 2.3 修改文件访问权限 2.4 Web服务器配置 2.5 修改django相关配置 正文 回到顶部 0. 引言 ...
- Java课程寒假之开发记账本软件(网页版)之四
一.实现基础功能之一(删除) 在删除的功能实现之前,要明白删除的条件是什么,一开始我是以去向和时间作为条件删除,但是删除的语句好像有问题,好像是因为出现了非法字符(应该是中文吧,不太清楚,因为这不是我 ...
- js设计模式(三)---代理模式
代理模式: 代理模式是为一个对象提供一个代理用品或占位符,以便控制对他的访问. 实现: 在 Web开发中,图片预加载是一种常用的技术,如果直接给某个 img 标签节点设置 src 属性,由于图片过大或 ...
- 用SQL快速删除U8账套
一.问题提出 通过"系统管理"来删除999账套,首先要求你备份然后才能删除.头痛的是: 1)备份需要发费很长的时间,特别是账套数据文件比较大时. 2)备份时,你的本本基本处于死机状 ...
- mybatis mapper-locations作用
application上配置了@MapperScan(扫面mapper类的路径)和pom.xml中放行了mapper.xml后,配置mapper-locations没有意义 查找后得知,如果mappe ...
- DELPHI中完成端口(IOCP)的简单分析(3)
DELPHI中完成端口(IOCP)的简单分析(3) fxh7622关注4人评论7366人阅读2007-01-17 11:18:24 最近太忙,所以没有机会来写IOCP的后续文章.今天好不容易有 ...
- jmeter将JDBC Request查询出的数据作为下一个接口的参数
现在有一个需求,从数据库tieba_info表查出rank小于某个值的username和count(*),然后把所有查出来的username和count(*)作为参数值,用于下一个接口. tieba_ ...