「一本通 6.4 例 4」曹冲养猪(CRT)

复习一下

扩展中国剩余定理

  • 首先考虑两个同余方程
    \[ x \equiv a_1\; mod\; m_1\\ x \equiv a_2\; mod\; m_2 \]

  • 化成另一个形式

\[ x = n_1 * m_1 + a_1\\ x = n_2 * m_2 + a_2 \]

  • 联立可得
    \[ n_1 * m_1 + a_1 = n_2 * m_2 + a_2\\ n_1 * m_1 - n_2 * m_2 = a_2 - a_1 \]
  • 有解的前提是
    \[ \gcd(m_1, m_2) |(a_2 - a_1) \]

  • \[ d = \gcd(m_1, m_2)\\ c = a_2 - a_1 \]

  • \[ n_1 \frac{m_1}{d} - n_2 \frac{m_2}{d} = \frac{c}{d}\\ n_1 \frac{m_1}{d} \equiv \frac{c}{d} \ mod \ \frac{m_2}{d} \]
  • 移项

\[ n_1 \equiv \frac{c}{d} * inv(\frac{m_1}{d}, \frac{m_2}{d}) \ mod\ \frac{m_2}{d}\\ n_1 = \frac{c}{d} * inv(\frac{m_1}{d}, \frac{m_2}{d}) + y_1 * \frac{m_2}{d} \]
然后\(n_1\)代入最上面的狮子可以得到

\[ x = (\frac{c}{d} * inv(\frac{m_1}{d}, \frac{m_2}{d}) + y_1 * \frac{m_2}{d}) * m_1 + a_1\\ x = m_1 * \frac{c}{d} * inv(\frac{m_1}{d}, \frac{m_2}{d}) + y_1 * \frac{m_2 m_1}{d} + a_1\\ x \equiv m_1 * \frac{c}{d} * inv(\frac{m_1}{d}, \frac{m_2}{d}) + a_1 \ mod \ \frac{m_2 m_1}{d} \]

  • 然后就是个新方程了
  • 当然也适用于互质情况
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<iostream>
#define ll long long 
#define M 22
#define mmp make_pair
using namespace std;
int read()
{int nm = 0, f = 1;char c = getchar();for(; !isdigit(c); c = getchar()) if(c == '-') f = -1;for(; isdigit(c); c = getchar()) nm = nm * 10 + c - '0';return nm * f;
}ll gcd(ll a, ll b)
{return !b ? a : gcd(b, a % b);
}ll exgcd(ll a, ll b, ll &x, ll &y)
{if(!b){x = 1, y = 0;return a;}else{ll d = exgcd(b, a % b, x, y);ll tmp = x;x = y;y = tmp - a / b * y;return d;}
}ll inv(ll a, ll p)
{ll x, y;ll d = exgcd(a, p, x, y);if(d != 1) return -1;return (x % p + p) % p;
}
ll a[M], b[M], n; ll excrt()
{ll a1 = a[1], m1 = b[1], a2, m2;for(int i = 2; i <= n; i++){a2 = a[i], m2 = b[i];ll c = a2 - a1, d = gcd(m1, m2);if(c % d) return -1;ll k = inv(m1 / d, m2 / d);m2 = m1 / d * m2;a1 = m1 * c / d % m2 * k + a1;m1 = m2;a1 = (a1 % m1 + m1) % m1;           }return a1;
}int main()
{n = read();for(int i = 1; i <= n; i++) b[i] = read(), a[i] = read();cout << excrt() << "\n";return 0;
}

转载于:https://www.cnblogs.com/luoyibujue/p/10673305.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/387057.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

06 MapReduce工作机制

MapReduce作业的执行流程 1、提交作業 在提交JobConf對象之後&#xff0c;用戶程序調用JobClient的runJob方法。 runJob方法會先行調用JobSubmissionProtocol接口所定義的submitJob方法&#xff0c;並將作業提交給JobTracker。 緊接着&#xff0c;runJob不斷循環&#xff0…

solr elasticsearch比较

solr&#xff1a; 优点 1、Solr有一个更大、更成熟的用户、开发和贡献者社区。 2、支持添加多种格式的索引&#xff0c;如&#xff1a;HTML、PDF、微软 Office 系列软件格式以及 JSON、XML、CSV 等纯文本格式。 3、Solr比较成熟、稳定。 4、不考虑建索引的同时进行搜索&#xf…

力扣(LeetCode)292. Nim游戏 巴什博奕

你和你的朋友&#xff0c;两个人一起玩 Nim游戏&#xff1a;桌子上有一堆石头&#xff0c;每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。 你们是聪明人&#xff0c;每一步都是最优解。 编写一个函数&#xff0c;来判断你是否可以在给定石头数…

Spring Cloud应用监控与管理Actuator

由于我们把一个复杂高耦合的单体系统拆分成了多个小型服务&#xff0c;所以部署应用的数量在不断增长&#xff0c;造成维护复杂度大大提升。所以我们需要一套自动化的监控运维机制&#xff0c;这套运维机制可以不间断的获取每个服务应用的各种指标&#xff0c;并根据这些指标信…

2019.04.09 电商25 结算功能1

结算功能要获取很多数据&#xff0c; 现在的主要问题是要知道获取对应的商品信息&#xff0c;要知道我选的是哪个的商品信息啊 它们选框的类名都一样啊&#xff0c;能遍历吗&#xff1f;遍历之后要去获取&#xff0c;它父级属性的值 有多少商品就有多少复选框&#xff0c;可以获…

性能堆分析思路

1、通过top找到对应的耗费资源比较大的进程ID&#xff0c; 2、ps p 进程ID -L -o pcpu,pid,tid,time,tname,cmd 3、然后利用上面面命令来找到对应的线程 4、利用Listthread方法 列出所有线程&#xff0c;与找到对应资源比较大的匹配 5、利用stack查找到对应的堆栈调用代码&…

第十二届湖南省赛 (B - 有向无环图 )(拓扑排序+思维)好题

Bobo 有一个 n 个点&#xff0c;m 条边的有向无环图&#xff08;即对于任意点 v&#xff0c;不存在从点 v 开始、点 v 结束的路径&#xff09;。为了方便&#xff0c;点用 1,2,…,n 编号。 设 count(x,y) 表示点 x 到点 y 不同的路径数量&#xff08;规定 count(x,x)0&#xff…

GC 调优(实战篇) - GC参考手册

说明: Allocation Rate, 翻译为分配速率, 而不是分配率; 因为不是百分比,而是单位时间内分配的量; 同理, Promotion Rate 翻译为 提升速率; 您应该已经阅读了前面的章节: 垃圾收集简介 - GC参考手册Java中的垃圾收集 - GC参考手册GC 算法(基础篇) - GC参考手册GC 算法(实现篇)…

01 HTML

1.什么是HTML&#xff1f;(Hyper Text Markup Language:超文本标记语言)超文本&#xff1a;功能比普通文本更加强大标记语言&#xff1a;使用一组标签对内容进行描述的一门语言(它不是编程语言)2.语法和规范&#xff1f;HTML文件都是以.html或者.htm结尾的&#xff0c;建议使用…

图的四种最短路径算法

本文总结了图的几种最短路径算法的实现&#xff1a;深度或广度优先搜索算法&#xff0c;弗洛伊德算法&#xff0c;迪杰斯特拉算法&#xff0c;Bellman-Ford算法 1&#xff09;&#xff0c;深度或广度优先搜索算法&#xff08;解决单源最短路径&#xff09; 从起始结点开始访问所…

20101008 搬家

刚刚系统还原了&#xff0c;把软件啥的都装上了&#xff0c;忙完一切&#xff0c;该整理整理照片&#xff0c;写写博客了&#xff08;总是如果不及时写&#xff0c;就几乎永远不会写了&#xff09;。我一贯喜欢"工欲善其事&#xff0c;必先利其器"&#xff0c;装个wi…

ZooKeeper集群与Leader选举

说说你对ZooKeeper集群与Leader选举的理解&#xff1f; ZooKeeper是一个开源分布式协调服务、分布式数据一致性解决方案。可基于ZooKeeper实现命名服务、集群管理、Master选举、分布式锁等功能。 高可用 为了保证ZooKeeper的可用性&#xff0c;在生产环境中我们使用ZooKeeper…

JVM初探:内存分配、GC原理与垃圾收集器

JVM内存的分配与回收大致可分为如下4个步骤: 何时分配 -> 怎样分配 -> 何时回收 -> 怎样回收. 除了在概念上可简单认为new时分配外, 我们着重介绍后面的3个步骤: I. 怎样分配- JVM内存分配策略 对象内存主要分配在新生代Eden区, 如果启用了本地线程分配缓冲, 则优先在…

02 CSS

使用 table 进行布局存在缺陷&#xff0c;而一般的布局都会采用 DIVCSS 来进行布局。 Div 它是一个html 标签&#xff0c;一个块级元素(单独显示一行)。它单独使用没有任何意义&#xff0c;必须结合 CSS 来使用。它主要用于页面的布局。 Span 它是一个 html 标签&#xff0c;…

为什么要在密码里加点“盐”

盐&#xff08;Salt&#xff09; 在密码学中&#xff0c;是指通过在密码任意固定位置插入特定的字符串&#xff0c;让散列后的结果和使用原始密码的散列结果不相符&#xff0c;这种过程称之为“加盐”。 以上这句话是维基百科上对于 Salt 的定义&#xff0c;但是仅凭这句话还是…

一致性哈希算法 应用

互联网创业中大部分人都是草根创业&#xff0c;这个时候没有强劲的服务器&#xff0c;也没有钱去买很昂贵的海量数据库。在这样严峻的条件下&#xff0c;一批又一批的创业者从创业中获得成 功&#xff0c;这个和当前的开源技术、海量数据架构有着必不可分的关系。比如我们使用m…