1. 程式人生 > 資料庫 >redis 常用型別

redis 常用型別

技術標籤:acwing演算法數學

中國剩餘定理

中國剩餘定理給出了以下的一元線性同餘方程組:
在這裡插入圖片描述
有解的判定條件,並用構造法給出了在有解情況下解的具體形式。
中國剩餘定理說明:假設整數m1,m2, … ,mn兩兩互質,則對任意的整數:a1,a2, … ,an,方程組(S)有解,並且通解可以用如下方式構造得到:
在這裡插入圖片描述是整數m1,m2, … ,mn的乘積,並設在這裡插入圖片描述是除了mi以外的n- 1個整數的乘積。
在這裡插入圖片描述的數論倒數( 為 模 意義下的逆元)
方程組(S)的通解形式為
在這裡插入圖片描述

在模M的意義下,方程組(S)只有一個解:
在這裡插入圖片描述

表達整數的奇怪方式

#include <bits/stdc++.h>
using
namespace std; typedef long long ll; int exgcd(ll a, ll b, ll &x, ll &y) //在歐幾里得演算法的基礎上進行擴充套件,算出xy { if (!b) { x = 1, y = 0; return a; } int d = exgcd(b, a % b, y, x); y -= a / b * x; return d; } int main() { int n; cin >> n; bool f=1; ll a1,
m1; cin>>a1>>m1; for(int i=0;i<n-1;i++) { ll a2,m2; cin>>a2>>m2; ll k1,k2; ll d=exgcd(a1,a2,k1,k2); if((m2-m1)%d) { f=0; break; } k1*=(m2-m1)/d; ll t=a2/d; k1=(k1%
t+t)%t; m1=a1*k1+m1; a1=abs(a1/d*a2); } if(f) cout<<(m1%a1+a1)%a1<<endl; //注意在c++中取餘的定義和數學中不同,c++中取餘的結果可能是負數 else cout<<"-1"<<endl; return 0; }