1. 程式人生 > >Crash的數字表格(莫比烏斯反演)

Crash的數字表格(莫比烏斯反演)

轉化 com -m line sqrt spa 輸出 格子 但是

Crash的數字表格

Description

今天的數學課上,Crash小朋友學習了最小公倍數(Least Common Multiple)。對於兩個正整數a和b,LCM(a, b)表示能同時被a和b整除的最小正整數。例如,LCM(6, 8) = 24。回到家後,Crash還在想著課上學的東西,為了研究最小公倍數,他畫了一張NM的表格。每個格子裏寫了一個數字,其中第i行第j列的那個格子裏寫著數為LCM(i, j)。一個4 5的表格如下: 1 2 3 4 5 2 2 6 4 10 3 6 3 12 15 4 4 12 4 20 看著這個表格,Crash想到了很多可以思考的問題。不過他最想解決的問題卻是一個十分簡單的問題:這個表格中所有數的和是多少。當N和M很大時,Crash就束手無策了,因此他找到了聰明的你用程序幫他解決這個問題。由於最終結果可能會很大,Crash只想知道表格裏所有數的和mod 20101009的值。

Input

輸入的第一行包含兩個正整數,分別表示 \(N\)\(M\)

Output

輸出一個正整數,表示表格中所有數的和\(mod \ 20101009\)的值。

Sample Input

\(4 \ 5\)

Sample Output

\(122\)

【數據規模和約定】

100%的數據滿足\(N, M ≤ 10^7\)

由題可得:我們應該求的是 \(\sum_{i =1} ^ n\ \sum_{j=1}^m\ lcm(i,j)\) (不妨設 \(n<=m\)

先可以由原式化簡:

\(ans = \sum_{i=1}^n\ \sum_{j=1}^n\ \frac{ij}{gcd(i,j)}\)

\(ans = \sum_{d=1}^n\ \sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\ \sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}\ [gcd(i,j)=1]\ ijd\)

經過最開始的基本化簡以後,既然這道題和 \(gcd\) 有許許多多不可描述的關系,我們可以考慮莫比烏斯反演。
既然要用莫比烏斯反演,我們就應該來構造相應的 \(f(x)\)\(F(x)\)

我們設 \(f(x, y, k)\) 表示 \(\sum_{i=1}^x\ \sum_{j=1}^y\ [gcd[i,j]=k]\ ij\)

再設 \(F(x,y,t)\)

表示 \(\sum_{i=1}^x\ \sum_{j=1}^y\ [t\mid gcd(i,j)]ij\)

\(\therefore \ ans=\sum_{d=1}^n\ d\ f(\lfloor\frac{n}{d}\rfloor,\lfloor\frac{m}{d}\rfloor,1)\)

現在,我們來仔細觀察一下 \(F(x,y,t)\)\(f(x,y,k)\) 兩個函數的關系

\(F(x,y,t)=\sum_{t\mid d}\ f(x,y,d)\)

由莫比烏斯反演後可得:

\(f(x,y,d)=\sum_{d\mid t}\ \mu(\frac{t}{d})\ F(x,y,t)\)

\(\because\ d=1\)

\(\therefore\ f(x,y,1)=\sum_{t=1}^x\ \mu(t)\ F(x,y,t)\)

現在,我們回過頭了思考一下我們上面一系列操作的意義:
我們由題目要求推得我們需要求 \(f(x,y,1)\)
但是我們發現直接求並不好求,所以我們反演以後轉化為去求 \(F(x,y,t)\) 再進一步求得 \(ans\)
既然我們轉化為 \(F(x,y,t)\) ,那麽這個函數應該要比較方面我們求值才可以達到我們的要求
所以我們來考慮一下 \(F(x,y,t)\) 這個函數
仔細思考後可以發現:

\(F(x,y,t)=\sum_{d=1}^x\ d^2\ (\sum_{a=1}^{\lfloor\frac{x}{d}\rfloor}\ a\ \sum_{b=1}^{\lfloor\frac{y}{d}\rfloor}\ b)\)

\(sum(x,y)=\sum_{a=1}^x\ \sum_{b=1}^y\ ab\)
顯然可以用高斯求和 \(O(1)\) 求得

\(\therefore \ F(x,y,t)=\sum_{d=1}^x\ d^2\ sum(\lfloor\frac{x}{d}\rfloor,\lfloor\frac{y}{d}\rfloor)\)

那麽整個分析過程就差不多完成了,綜上所述:

\(ans=\sum_{d=1}^n\ d\ f(\lfloor\frac{n}{d}\rfloor,\lfloor\frac{m}{d}\rfloor,1)\)
我們可以分塊處理 \(f\) ,此處可以分塊 復雜度\(O(\sqrt{n})\)

\(f(x,y,1)=\sum_{t=1}^x\ \mu(t)\ F(x,y,t)=\sum_{t=1}^x\ \mu(t)\ t^2\ sum(\lfloor\frac{x}{t}\rfloor,\lfloor\frac{y}{t}\rfloor)\)
我們可以 \(O(1)\) 預處理 \(\mu(t)\ t^2\),計算 \(sum\)

所以總復雜度 \(O(n\sqrt{n})\)

Crash的數字表格(莫比烏斯反演)