11.26闲话

啊?忘了今天赤羽生日

要不是K8He提醒就不记得了QAQ

去搜了一下↓

【赤羽2023诞生日】光【用泪重燃那新生的光△五维介质】

这个是生贺曲吗↑


是谁在看我的闲话,怎么高二学长都退役了还有阅读量


\[\begin{align} \sum_{i=1}^{n}\dbinom{m+i-1}{i} &=\sum_{i=1}^{n}\dbinom{m+i-1}{(m+i-1)-i}\\ &=\sum_{i=1}^{n}\dbinom{m+i-1}{m-1}\\ &=\sum_{i=1}^{n}\dbinom{m+i-1}{m-1}+\dbinom{m}{m}-1\\ &=\dbinom{m+n-1}{m-1}+\cdots+\dbinom{m+3}{m-1}+\dbinom{m+2}{m-1}+\dbinom{m+1}{m-1}+\dbinom{m}{m-1}+\dbinom{m}{m}-1\\ &=\dbinom{m+n-1}{m-1}+\cdots+\dbinom{m+3}{m-1}+\dbinom{m+2}{m-1}+\dbinom{m+1}{m-1}+\dbinom{m}{m-1}+\dbinom{m}{m}-1\\ &=\dbinom{m+n-1}{m-1}+\cdots+\dbinom{m+3}{m-1}+\dbinom{m+2}{m-1}+\dbinom{m+1}{m-1}+\dbinom{m+1}{m}-1\\ &=\dbinom{m+n-1}{m-1}+\cdots+\dbinom{m+3}{m-1}+\dbinom{m+2}{m-1}+\dbinom{m+2}{m}-1\\ &\cdots\\ &=\dbinom{m+n-1}{m-1}+\dbinom{m+n-1}{m}-1\\ &=\dbinom{m+n}{m}-1\\ \end{align} \]

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int inv[1919810],fact[1234567];
inline int read(){
    int s = 0,w = 1;char ch = getchar();
    while(ch<'0'||ch>'9'){ if(ch == '-') w = -1;ch = getchar();}
    while(ch>='0'&&ch<='9'){ s = s*10+ch-'0';ch = getchar();}
    return s*w;
}
inline int qpow(int a,int k,int p){
    int res=1;
    while(k){
        if(k&1) res=res*a%p;
        k>>=1;
        a=a*a%p;
    }
    return res;
}
inline int Comb(int a,int b,int p){
    return a<b?0:fact[a]*inv[a-b]%p*inv[b]%p;
}
inline int lucas(int a,int b,int p){
    if(!a||!b) return 1;
    if(a<p&&b<p) return Comb(a,b,p);
    return Comb(a%p,b%p,p)*lucas(a/p,b/p,p)%p;
}
signed main(){
#ifndef ONLINE_JUDGE
    freopen("1.in","r",stdin);
    freopen("1.out","w",stdout);
#endif
    int K8=read(),p=1000003;
    inv[0]=inv[1]=fact[1]=1;fact[0]=1;
    for(int i=2;i<p;i++) fact[i]=(fact[i-1]*i)%p;
    inv[p-1]=qpow(fact[p-1],p-2,p);
    for(int i=p-2;i>=1;i--)
        inv[i]=inv[i+1]*(i+1)%p;
    while(K8--){
        int a=read(),b=read(),c=read(),ans=0;
        int m=c-b+1;
        std::cout<<(lucas(m+a,m,p)+p-1)%p<<std::endl;
    } 
}

中国剩余定理(\(\mathrm {CRT}\))

对于两两互质的自然数\(\{m_1,m_2,m_3,\cdots,m_k\}\),记 $ m=\prod_{i=1}^{k} m_i$

\[\begin{cases} x&\equiv a_1 \pmod {m_1} \\ x &\equiv a_2 \pmod {m_2} \\ &\vdots \\ x &\equiv a_k \pmod {m_k} \\ \end{cases} \]

\(\bmod \ \mathrm M\) 同余的意义下有唯一解

解为$$x=(\sum_{c=i}^{k}a_i\times \frac{ m}{m_i} \times (\frac{ m}{ m_i})^{-1})\bmod \ m$$

此处的 \((\dfrac{ m}{ m_i})^{-1}\)\(\dfrac{ m}{ m_i}\)\(\bmod \ m_i\)意义下的逆元

  • 证明

\(i\neq j\) 时,有 \(m_j \equiv 0 \pmod {n_i}\) ,故 \(c_j \equiv m_j \equiv 0 \pmod {n_i}\) 。又有
\(c_i \equiv m_i \cdot (m_i^{-1} \bmod {n_i}) \equiv 1 \pmod {n_i}\) ,所以我们有:

\[\begin{aligned} x&\equiv \sum_{j=1}^k a_jc_j &\pmod {n_i} \\ &\equiv a_ic_i &\pmod {n_i} \\ &\equiv a_i \cdot m_i \cdot (m^{-1}_i \bmod n_i) &\pmod {n_i} \\ &\equiv a_i &\pmod {n_i} \end{aligned} \]

对于 \(\forall i=1,2,\cdots,k\) ,得到的 \(x\) 总是满足 \(x\equiv a_i \pmod{n_i}\)

因为 \(a_i\) 没有特殊限制,所以 $ {\forall a_i}$ 都对应一个 \(x\)

对于 \(x\neq y\)\(\ \exists \ i\) 使得 \(x\)\(y\)\(\bmod \ n_i\) 下不同余。

故方程组总是有唯一解。

代码
#include<bits/stdc++.h>
#define int long long
#define maxm 0X6CF
inline int read(){
    int s = 0,w = 1;char ch = getchar();
    while(ch<'0'||ch>'9'){ if(ch == '-') w = -1;ch = getchar();}
    while(ch>='0'&&ch<='9'){ s = s*10+ch-'0';ch = getchar();}
    return s*w;
}
inline int exgcd(int a,int b,int &x,int &y){
    if(b==0){
        x=1,y=0;
        return a;
    }
    int d=exgcd(b,a%b,x,y);
    int z=x;x=y,y=z-y*(a/b);
    return d;
}
inline int exmod(int a,int b){
    int d,x,y;
    d=exgcd(a,b,x,y);
    if(d==1) return(x%b+b)%b;
    else return -1;
}
std::vector<int> a,m;
int M=1,x=0;
signed main(){
    int n=read();
    a.resize(n),
    m.resize(n);
    for(int i=0;i<n;i++){
        M*=(m[i]=read());
        a[i]=read();
    }
    for(int i=0;i<n;i++){
        (x+=(a[i]*(M/m[i])*exmod(M/m[i],m[i])))%=M;
    }
    std::cout<<x;
}    

拓展中国剩余定理(\(\mathrm {exCRT}\))

求解两个方程

\[\begin{cases} x&\equiv a_1 \pmod {m_1} \\ x &\equiv a_2 \pmod {m_2} \\ \end{cases} \]

转化为方程

\[x = \begin{cases} a_1 + p \times m_1 \\ a_2 + q \times m_2 \end{cases} \]

再次转化即可得到

\[p \times m_1 - q \times m_2 = a_1 - a_2 \]

根据裴蜀定理

  • \(a,b\in \Z \land a,b\ne 0\) ,对 \(\forall x,y \in \Z\) ,满足 \(\gcd(a,b)\mid ax+by\) ,且 \(\exists x,y\in \Z\) , 使 \(ax+by=\gcd(a,b)\) .

\(a_2-a_1 \nmid \gcd(m_1,m_2)\) 时,无解

其余情况使用高贵的\(\mathrm {exgcd}\)可以求出一组解\((p,q)\)

此时\(x\equiv (m_1 \times p+a_1)\pmod {\mathrm{lcm}(m_1, m_2)}\)

对于多个方程

\[\begin{cases} x&\equiv a_1 \pmod {m_1} \\ x &\equiv a_2 \pmod {m_2} \\ &\vdots \\ x &\equiv a_k \pmod {m_k} \\ \end{cases} \]

我们可以分类讨论,并两两合并成

\[\begin{cases} \begin{cases} x&\equiv (m_1 \times p+a_1)\pmod {\mathrm{lcm}(m_1, m_2)} \\ x&\equiv (m_3 \times p+a_3)\pmod {\mathrm{lcm}(m_3, m_4)} \\ &\vdots \\ x&\equiv (m_{n-1} \times p+a_{n-1})\pmod {\mathrm{lcm}(m_{n-1}, m_{n})} \\ \end{cases} &\gcd(n,2)=2 \\ \begin{cases} x&\equiv (m_1 \times p+a_1)\pmod {\mathrm{lcm}(m_1, m_2)} \\ x&\equiv (m_3 \times p+a_3)\pmod {\mathrm{lcm}(m_3, m_4)} \\ &\vdots \\ x &\equiv a_n \pmod {m_n} \\ \end{cases} &\gcd(n,2)=1 \end{cases} \]

接下来再次进行\(\mathrm {exCRT}\)

进行第二次合并,第三次合并....直到只剩下一个同余方程

此时使用高贵的\(\mathrm {exgcd}\)即可求解



赤羽生日快乐!

posted @ 2023-11-26 14:32  Vsinger_洛天依  阅读(18)  评论(1编辑  收藏  举报