「一本通 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.pswp.cn/news/387057.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387057.shtml
英文地址,請注明出處:http://en.pswp.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…