1. 程式人生 > >演算法學習-莫比烏斯反演

演算法學習-莫比烏斯反演

寫在前面

  • 必須把更多的精力放在文化課上了, 所以這段時間的學習和數學相關的比較多, 希望可以對文化課有幫助.

莫比烏斯反演公式

  • g(n)=d|nf(d)f(n)=d|nμ(d)g(nd)

基礎知識

  • μ函式
    f(n)=1,(1)k,0,n=1n=p1p2...pkn=others
  • μ 函式是積性函式, 因為當 n 是質數時 μ(n)=(1)1=1, 所以可以通過篩法求出 μ 函式.
mu[1] = 1;
for(i = 2; i <= n; i++) {
    if(!vis[i]) {
        prime[++c] = i;
        mu[i] = -1
; }
for(j = 1; prime[j] * i <= n; j++) { vis[prime[j] * i] = 1; if(i % prime[j] == 0) { mu[prime[j] * i] = 0; break; } mu[prime[j] * i] = -mu[i]; } }

莫比烏斯反演的證明

  • 可以從後向前證明.
  • 已知 g(n)=d|nf(d)
  • 求證 f(n)=d|nμ(d)g(nd)
  • 證明
    f(n)=d|nμ(d)g(
    nd)=d|nμ(d)k|ndf(k)=d|nk|ndf(k)μ(d)

    然後的一步讓我很頭疼, 要把 f(k) 提出來, 統計 f(k) 所乘的 μ(d)的和.
    仔細觀察, k 的取值範圍就是 n 的所有因子. 如果 f(k) 要和 μ(d) 相乘, 那麼滿足的關係是 k|nd, 也就是 km=nd, 變換一下形式就得到 dm=nk, 即 d|nk. 也就是 f(k) 要和所有 d|nkd 相乘.
    用這個結論繼續化簡剛才的式子, 得到下面
    f(n)=d|nk|ndf(k)μ(d)=k|nf(k)d|nkμ(d)
    μ函式有很多奇怪的性質, 比如下面這條
    d|n
    μ(d)={1,0,n=1n>1

    n=1 時比較顯然
    n>1 時將 n 分解為

    相關推薦

    演算法學習-

    寫在前面 必須把更多的精力放在文化課上了, 所以這段時間的學習和數學相關的比較多, 希望可以對文化課有幫助. 莫比烏斯反演公式 g(n)=∑d|nf(d)⇒f(n)=∑d|nμ(d)g(

    學習筆記--數論--初認識

    開頭 iostream rime prime 沒有 ace 建議 bool names 前言 本文只是用比較通俗的例子讓大家了解一下什麽是莫比烏斯反演,其中說明 (明明都是瞎猜)可能有紕漏。本人也是個蒟蒻,未能給出珂學證明,還望多多指教。 理論基礎 “|”符號表示整除

    學習筆記

    莫比烏斯 cnblogs clas sdn uri csdn .net body 莫比烏斯反演 莫比烏斯反演學習筆記 http://blog.csdn.net/litble/article/details/72804050 hdu1695 莫比烏斯反演學習筆記

    學習筆記

    莫比烏斯反演 pre 公式 筆記 不同 mob mar margin n) 定義莫比烏斯函數$μ$$$ μ(d)=\left\{\begin{matrix} 1& n=1\\ (-1)^k&d=p_1*p_2*...*p_k \\ 0&o

    [學習筆記]

    1、\(Crash\)的數字表格 \(assume\ n<m\) \(\sum_{i=1}^{n}\sum_{j=1}^{m}lcm(i,j)\) \(\sum_{d=1}^{n}\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)==d]\frac{ij}{d}\) \(

    狄利克雷卷積 杜教篩 學習筆記

    前置知識:一些數論函式,比如尤拉函式、莫比烏斯函式的一些性質,積性函式及性質,整除分塊。 這裡預設大家會前置知識,如果不會請自行學習。 之前嘗試看過,結果後來都忘光了,於是還是決定應該寫個學習筆記記錄一下。 首先開始介紹莫比烏斯反演。 我們設

    學習筆記(轉載自An_Account大佬)

    有一個 多人 rac 導出 公式 i++ 約數 n) 得出 轉載自An_Account大佬 提示:別用莫比烏斯反演公式,會炸的 只需要記住: [gcd(i,j)=1]=∑d∣gcd(i,j)μ(d)[gcd(i,j)=1]=\sum_{d|gcd(i,j)}\mu(d)[g

    學習(HDU1695)

    原文地址    前兩天學習了一下之前一直覺得高大上並且想學的內容——莫比烏斯反演。不過學任何東西都是一樣,學會了發現也就這樣,雖然只是皮毛。OK,廢話不多說,進入正題,今天我用杭電的1695這道題再來溫習一下莫比烏斯反演。    HDU1695的題目大意

    hdu GCD(+一點學習筆記)

    GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 15999  &n

    學習日記

    span 神奇 urn prim name 12g article per show 目錄 莫比烏斯函數 莫比烏斯反演 【CJOJ2512】gcd之和 -反演 P2257

    學習記錄(最菜的垃圾而淺薄基礎的總結)

    turn 找到 mem += 分解質 並不會 但是 printf 取值 鑒於容易忘,決定先把目前會的寫出來..... 莫比烏斯函數:對於一個整數N,按照算數基本定理分解質因數為N = p1^c1 * p2^c2 * p3^c3 * ... * pm^cm

    [SPOJ VLATTICE]Visible Lattice Points 數論

    string rst ase 計算 mod visible font sample poj 7001. Visible Lattice Points Problem code: VLATTICE Consider a N*N*N lattice.

    【bzoj4176】Lucas的數論 +杜教篩

    wid eight 前綴 .html != brush name load ans 題目描述 去年的Lucas非常喜歡數論題,但是一年以後的Lucas卻不那麽喜歡了。 在整理以前的試題時,發現了這樣一道題目“求Sigma(f(i)),其中1<=i<

    【BZOJ2045】雙親數

    namespace 一個 ron == true pac 公約數 ostream 都是 【BZOJ2045】雙親數 Description 小D是一名數學愛好者,他對數字的著迷到了瘋狂的程度。 我們以d = gcd(a, b)表示a、b的最大公約數,小D執著的認為,這樣

    【bzoj2154】Crash的數字表格

    name ros -1 led idt 莫比烏斯 style efi con 題目描述 今天的數學課上,Crash小朋友學習了最小公倍數(Least Common Multiple)。對於兩個正整數a和b,LCM(a, b)表示能同時被a和b整除的最小正整數。例如,LCM

    Dirichlet卷積和

    如果 bsp 滿足 常見 定義 row chl 莫比烏斯反演 nbsp 半夜不睡寫博客 1.Dirichlet卷積     定義2個數論函數f,g的Dirichlet卷積$(f*g)n=\sum_{d|n}f(d)g(\frac{n}{d})$     Dirichle

    isp init 我們 線性 spa 線性篩 之前 element int 莫比烏斯反演在許多情況下可以簡化運算。 定理:F(n)和f(n)是定義在非負整數集合上的兩個函數,並且滿足條件F(n)=∑d|n f(d)。 附:∑d|n 的意思是對所有n的因子d求和。 那麽,我

    bzoj 2301 Problem b -

    flag class memory sample sin swa scrip return lag Description 對於給出的n個詢問,每次求有多少個數對(x,y),滿足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y

    [SPOJ 5971] LCMSum

    strong logs git 復雜 進行 str == 給定 register 題意   $t$ 組詢問, 每組詢問給定 $n$ , 求 $\sum_{k = 1} ^ n [n, k]$ .   $t \le 300000, n \le 1000000$ . 一些常

    hdu1695()

    ios targe .net ++ 其中 參考 http bool rim 題目鏈接: http://acm.hdu.edu.cn/showproblem.php?pid=1695 題意: 對於 a, b, c, d, k . 有 x 屬於 [a, b], y 屬於