日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/11/30 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 「一本通 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}ozvdkddzhkzd - n_2 \frac{m_2}ozvdkddzhkzd = \frac{c}ozvdkddzhkzd\\ n_1 \frac{m_1}ozvdkddzhkzd \equiv \frac{c}ozvdkddzhkzd \ mod \ \frac{m_2}ozvdkddzhkzd \]
  • 移項

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

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

  • 然后就是個新方程了
  • 當然也適用于互質情況
#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

總結

以上是生活随笔為你收集整理的「一本通 6.4 例 4」曹冲养猪(CRT)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。