学习笔记:各种数学
持续更新,主要是在自己忘了时能来这看看
费马小定理
若 \(p\) 为素数且 \(gcd(a,p)=1\),则 \(a^{p-1}\equiv 1(\text{mod}\; p)\)
欧拉定理
若 \(gcd(a,m)=1\),则\(a^{\phi(m)} \equiv 1 \; ( \text{mod} \;m)\)
扩展欧拉定理
若 \(b \ge \phi(p)\)有
扩展欧几里得
https://www.cnblogs.com/blue-tsg/p/16828622.html
Lucas定理
用于求解 \(n,m\) 很大但是 \(p\) 很小的时候
线性求逆元
中国剩余定理(crt)
其中 \(n_i\) 两两互质,求解最小正整数解 \(x\)
记\(n=\prod_{i=1}^{n}n_i,m_i=\frac{n}{n_i},m_i^{-1}\)为 \(m_i\) 关于 \(n_i\) 的逆元
证明:
因为 对于任意 \(j\;(i\neq j)\),有 \(m_j\equiv 0\;\pmod {n_i}\) 所以有:
扩展中国剩余定理
当 \(n_i\) 不互质时,考虑两两合并方程
对于:
有:
即:
用 \(\text{exgcd}\) 求解此不定方程和判断无解
对与求出的特解 \(x'\),通解 \(x=x'+k\times \text{lcm}(m_1,m_2)\)
所以两方程可以合并为 \(a\equiv x' \pmod {\text{lcm}(m_1,m_2)}\)
代码
ll r1,m1,r2,m2,n;
ll exgcd(ll a,ll b,ll &x,ll &y){
if(!b){
x=1;y=0;return a;
}
ll g=exgcd(b,a%b,y,x);
y-=(a/b)*x;
return g;
}
ll lcm(ll a,ll b){
ll x,y;
ll g=exgcd(a,b,x,y);
return a/g*b;
}
ll solve(ll a,ll b,ll c){
ll x,y;
ll g=exgcd(a,b,x,y);
if(c%g) return -1;
b/=g;c/=g;
return (x*c%b+b)%b;
}
void merge(){
ll x=solve(m1,m2,r2-r1);
if(x==-1){puts("-1");exit(0);}
r1=x*m1+r1;
m1=lcm(m1,m2);
r1=(r1%m1+m1)%m1;
}
signed main(){
n=read();
for(int i=1;i<=n;i++){
if(i==1) m1=read(),r1=read();
else m2=read(),r2=read(),merge();
}
printf("%lld\n",(long long)r1);
return 0;
}
BSGS
北上广深拔山盖世
解决如 \(a^x\equiv b \pmod p\),已知 \(a,b,p\ge 1,gcd(a,p)=1\),求 \(x\)
设 \(x=c\times t-d,t=\lceil\sqrt p \rceil\)
所以 \(a^{c\times t}\equiv b\times a^{d}\)
把右边的 \(b\times a^d \pmod p\)存 \(\operatorname{map}\)里
左边枚举 \(c\) 查表就行了
代码
ll bsgs(ll a,ll b,ll p){
map<ll,ll> mp; mp.clear();
b%=p;a%=p;
ll t=sqrt(p)+1;
for(int i=0;i<t;i++){
mp[1ll*b*qpow(a,i,p)%p]=i;
}
a=qpow(a,t,p);
if(a==0) return b==0?1:-1;
for(int i=1;i<=t;i++){
ll val=qpow(a,i,p);
if(mp.find(val)!=mp.end()){
if(i*t-mp[val]>=0) return i*t-mp[val];
}
}
return -1;
}
第二类斯特林数·行
定义:把 \(n\) 个不同的小球放进 \(m\) 个相同的盒子里的方案数,记作\(\begin{Bmatrix} n\\m\end{Bmatrix}\) 或 \(S(n,m)\)
递推式:
相当于讨论第 \(n\) 个球放哪,若放入一个新盒子,所有新盒子等价,方案数为 \(S(n-1,m-1)\),若放入已经有球的盒子,因为小球不一样,放入不同的盒子方案是不一样的,所以乘个 \(m\)
容斥原理:
相当于枚举空盒个数 \(k\),剩下的随便放,最后要求 \(k=0\) 时的值,但是有重复(随便放也可能产生空盒),所以容斥一下
把组合数拆开再化简一下
这是个卷积形式,直接一个NTT可以在 \(n\log n\)复杂度内求解
\(S(n,0),S(n,1) \ldots S(n,n)\)
一些性质:
- \(n^k=\sum_{i=0}^{k}S(k,i)\times i! \times C(n,i)\)
Min_Max 容斥
记 \(max(S)\) 为集合 \(S\) 中的最大值,\(min(S)\) 为集合 \(S\) 中的最小值,\(∣S∣\) 为集合 \(S\) 的元素数量,那么以下两个等式成立
性质:
1.在期望下成立,即:
叉积
对于\(\vec{a}(x_1,y_1),\vec{b}(x_2,y_2)\)
若 \(P \times Q > 0\) , 则P在Q的顺时针方向。
若 \(P \times Q < 0\) , 则P在Q的逆时针方向。
若 \(P \times Q = 0\) , 则P与Q共线,但可能同向也可能反向。
向量的叉积与两两向量组成的平面垂直,方向用右手定则
叉积的模长几何意义是两个向量组成的平行四边形面积
二项式定理
二项式反演
广义容斥原理
设\(P_i\)为至少有\(i\)种性质的元素的元次,\(Q_i\)为恰好有\(i\)种性质的元素的元次,则