數學

參考資料

#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隻鴿子

置換

把一個有限集打到自己的雙射函數

有奇偶性

arc167D

組合數

\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負責人

做題時間

Made with Slides.com