數學
參考資料
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll p=1e9+7;默認的事情
p表示質數,以下提到的數皆默認為整數
數論
一些符號和定義
a\mid b表示a整除b,b是a的倍數,a是b的因數\\
a\perp b表示a,b互質
質數
判定質數
從2掃到 \sqrt n看有沒有人是因數
質數篩
找1到n裡的質數
用判定質數的想法,\\
把2到\sqrt{n}的倍數都篩掉\\
O(n\log n)
只用2到\sqrt{n}的質數去篩\\
O(n\log\log n)
線性篩
讓每個合數被自己的最小因數篩掉
vector<int> vis,prime;
for(int i=2;i<n;i++){
if(!vis[i])prime.push_back(i);
for(auto x:pr){
if(x*i>n){
break;
}
vis[x*i]=1;
if(i%x==0){
break;
}
}
}數論函數
積性函數:\forall a\perp b有f(ab)=f(a)f(b)\\
質因數分解:\displaystyle{n=\prod_i{p_i^{\alpha_i}}}\\
因數個數:\displaystyle{\tau(n)=\prod_i{(a_i+1)}}\\
因數總和:\displaystyle{\sigma(n)=\prod_i{\sum_{j=0}^{\alpha_i}{{p_i}^j}}}=\prod_i\frac{p_i^{\alpha_i+1}-1}{p_i-1}\\
歐拉函數:\varphi(n):=|\lbrace a\leq n|a\perp n \rbrace|=\prod_i{p_i^{\alpha_i-1}(p_i-1)}
算歐拉函數
在做線性篩的時候順便做
同餘
整數a,b在模p下同餘等價於p\mid a-b。\\
也會記做a\equiv b \pmod p
+-\times
ll add(ll x,ll y){
return ((x+y)%p+p)%p;
}
ll mul(ll x,ll y){
return x*y%mod;
}\div
\frac{a}{b}\equiv x\pmod p\\
a\equiv bx\pmod p\\
如果我們找到一個數b^{-1},使bb^{-1}\equiv 1\pmod p\\
ab^{-1}\equiv x\pmod p\\
我們也將b^{-1}稱為b的模逆元
費馬小定理
a\perp p,a^{p-1}\equiv 1\pmod p\\
a^{-1}\equiv a^{p-2}\pmod p\\
\\x^y
ll po(ll x,ll y){
ll ans=1;
while(y){
if(y&1)ans*=x,ans%=p;
x*=x,x%=p,y>>=1;
}
return ans;
}
\\x^{-1}
ll inv(ll x){
return po(x,p-2);
}歐拉定理
a\perp m,a^{\varphi(m)}\equiv 1\pmod m\\
一行算模逆元
\left[\frac{p}{a}\right]\times a+(p\%a)\equiv 0 \pmod p\\
\left[\frac{p}{a}\right]\times(p\%a)^{-1}+a^{-1}\equiv 0 \pmod p\\
a^{-1}\equiv -\left[\frac{p}{a}\right]\times(p\%a)^{-1}\pmod p
ll inv(ll x){
return x==1?1:(p-p/x)*inv(p%x)%p;
}貝祖定理
\forall a,b,ab\neq 0 \exists x,y使得ax+by=gcd(a,b)\\
把b代p\\
對於不被p整除的a可以找到x,y\\
使ax+py=1\\
ax\equiv 1\pmod p
#define pii pair<ll,ll>
#define mp make_pair
#define F first
#define S second
pii exgcd(ll a,ll b){
if(b == 0) return mp(1, 0);
pii ans = exgcd(b, a % b);
return mp(ans.S, ans.F - a / b * ans.S);
}
ll inv(ll a){
return exgcd(a,p).F;
}ax+by=gcd(a,b)\\
=gcd(b,a\%b)=gcd(b,a-\lfloor\frac{a}{b}\rfloor b)\\
=bx'+(a-\lfloor\frac{a}{b}\rfloor b)y'\\
=ay'+b(x'-\lfloor\frac{a}{b}\rfloor y')
想找一個x使:
x\equiv a_i\pmod {n_i},1\leq i\leq k\\
\forall i\neq j,n_i\perp n_j
設n=\displaystyle\prod_{i=1}^k{n_i},m_i=\frac{n}{n_i},\\
m_i在模n_i下的模逆元是m_i^{-1},c_i=m_im_i^{-1}\\
那x\equiv\displaystyle\sum_{i=1}^k{a_ic_i}\pmod n
一些知道不虧的事
wilson:(p-1)!\equiv -1\pmod p\\
wolstenholme's:p>3,\displaystyle\sum_{i=1}^{p-1}\frac{1}{i}\equiv 0\pmod {p^2}\\
\displaystyle\sum_{i=1}^{p-1}\frac{1}{i^2}\equiv 0\pmod {p}\\
習題
組合
鴿籠原理
有n隻鴿子要放到m個籠子裡\\
那一定可以找到一個籠子有至少\lceil\frac{n}{m} \rceil隻鴿子
置換
組合數
\binom{n}{m}=\frac{n!}{m!(n-m)!}\\
\binom{n}{m}=\binom{n-1}{m-1}+\binom{n-1}{m}\\
算法:1.n\leq1000\ O(n^2)帕斯卡三角形\\
2.n\leq 1000000 建階乘表,用公式算\\
3.模質數時,n\leq 10^{18},p\leq 1000,lucas\ theorem\\
4.模合數時,n很大
exlucas,我不會
Lucas Theorem
\binom{n}{m}\equiv \binom{\lfloor\frac{n}{p}\rfloor}{\lfloor\frac{m}{p}\rfloor}\binom{n\%p}{m\%p}\pmod p
卡特蘭數
C_n=\frac{1}{n+1}\binom{2n}{n}=\binom{2n}{n}-\binom{2n}{n+1}
排容
數學課本有寫 自己去看
by負責人
做題時間
數學
By owoovo
數學
- 169