ra 數論 , 莫比烏斯反演 , 整點統計

2022-05-07 18:57:09 字數 3426 閱讀 3658

求 $$\displaystyle \sum_^ \sum_^ [\mathrm (i,j) > n] \pmod $$ .

$ n \le 10^$ .

這是我們考試的一道題 ... 考試的時候以為能找出規律 , 後來發現還是一道數論題 qwq

而且部分分很不良心啊 , 只給了 \(o(n)\) 多的一點分 , 我 \(o(n \ln n)\) 根本沒活路 .. 還是直接開始推吧 ~

\[\begin

\sum_^ \sum_^ [\mathrm (i,j) > n] &=n^2- \sum_^ \sum_^ [\mathrm (i,j) \le n]\\

&= n^2 - \sum_^ \sum_^ \rfloor} \sum_^ \rfloor} [ijd \le n] \cdot [i \bot j] \\

&= n^2 - \sum_^ \sum_^ \rfloor} \sum_^ \rfloor}[ijd \le n] \sum_\mu(x) \\

&= n^2 - \sum_^ \sum_^\rfloor} \mu(x) \sum_^ \rfloor} \sum_^ \rfloor}[ijdx^2 \le n] \\

&= n^2 - \sum_^ \mu(x) \sum_^ \rfloor} \sum_^ \rfloor} \sum_^ \rfloor}[ijdx^2 \le n] \\

\end

\]到這一步不難發現由於 \([ijdx^2 \le n]\) 可以縮減很多範圍了 比如 \(x \le \lfloor \sqrt n \rfloor\) ... 直接一波縮範圍

\[\displaystyle = n^2 - \sum_^ \mu(x) \sum_^ \rfloor} \sum_^ \rfloor} \sum_^ \rfloor}[ij \le \lfloor \frac \rfloor]

\]我們可以考慮看一下後面兩個 \(\sum\) 好像很有特點。令

\[\displaystyle f(x) = \sum_^ \sum_^ [ij \le x]

\]那麼原式就是

\[\displaystyle = n^2 - \sum_^ \mu(x) \sum_^ \rfloor} f(\lfloor \frac \rfloor)

\]觀察一下 \(f(x)\) 好像也可以進行轉化

考慮列舉乙個 \(i,j\) 的積 , 看有多少對 \((i,j)\) 可以 .

\[\displaystyle f(x) = \sum_^ \lfloor \frac \rfloor

\]這個容易在 \(o(\sqrt n)\) 直接分塊解決 . 這樣帶入直接做就有 60 分了 \((n \le 10^8)\) , 不會積分證明複雜度qaq ....

卡一卡 , 在本機上能跑 \(10^9\) 能拿80分 爽歪歪 qwq

後來我意識到瓶頸在 \(f(x)\) 處 , 各種問人是否有公式計算 .... 後來才發現 這個竟然是今年集訓隊** ??!!!

**《一些特殊的數論函式求和問題》 —— 安徽師範大學附屬中學 朱震霆 **

考慮我最初的那個式子

\[\displaystyle f(n) = \sum_^ \sum_^ [ij \le n]

\]難道不就是數 \(xy=n\) 下面的整點個數嗎 !!

我認真看了**許久,可還是看不懂,只知道大概就是用很多根切線去分割,然後去數切線下方的點.

過幾天看懂了再來理解 .... 只知道複雜度是 \(o(n^})\) 的,十分優秀 ~

然後直接找到 whzzt 的** ,嘗試著放進去我的程式...

竟然過了!!!跑了 \(0.5s\) 就過了.... (原來要跑 \(6s\) )

掛一波**就跑 qwq

#include #define for(i, l, r) for (register ll i = (ll)(l), i##end = (ll)(r); i <= i##end; ++ i)

#define fordown(i, r, l) for (register ll i = (ll)(r), i##end = (ll)(l); i >= i##end; -- i)

#define set(a, v) memset(a, v, sizeof(a))

using namespace std;

typedef long long ll;

inline bool chkmin(ll &a, ll b)

inline bool chkmax(ll &a, ll b)

inline ll read()

void file()

const ll mod = 1e9 + 7;

const ll n = 1e6 + 1e3;

ll mu[n], prime[n], cnt = 0; bitsetis_prime;

void init(ll maxn)

} }}/*inline ll sumdown(ll a)

return (m[a] = res % mod);

}*/typedef unsigned long long ull;

typedef unsigned long long ull;

typedef unsigned int uint;

unordered_mapm;

namespace ds

inline void push (uint x, uint y)

inline void top (uint &x, uint &y)

} using stac :: push;

using stac :: pop;

using stac :: top;

inline ull solve (ull n) ;

auto cut_off = [&] (ull x, uint dx, uint dy) ;

while (stac :: qr)

if (y <= w) break;

while (true)

while (true) else push (dx = mx, dy = my);

}} for (y --; y; y --) ret += n / y;

return stac :: qr = 0, (m[n] = ret * 2 - v * v); }}

int main()

(res += mod + tot % mod * mu[x]) %= mod;

} res = ((n % mod) * (n % mod) % mod - res + mod) % mod;

cout << res << endl;

#ifdef zjp_shadow

cerr << (double) clock() / clocks_per_sec << endl;

#endif

return 0;

}

數學 數論 莫比烏斯反演

一 莫比烏斯反演涉及知識 1.莫比烏斯函式 2.莫比烏斯的線性篩法 3.狄利克雷卷積 4.莫比烏斯反演詳解 5.整除法分塊 6.杜教篩 二 莫比烏斯函式定義 n 1 k text 0 text end n 1 1 k0 n 1 n p1 p2 p3 pk 其中p 是質數 else 其他情況 也就是說...

莫比烏斯反演 二 莫比烏斯反演定理

首先設兩個任意函式f x 和f x 定義運算 f x sum f d 這時就可以用f x 表示f x f 1 f 1 f 2 f 1 f 2 f 3 f 3 f 1 f 4 f 4 f 2 f 1 f 5 f 5 f 1 f 6 f 6 f 3 f 2 f 1 這時可以試著用f x 表示f x f ...

莫比烏斯反演

首先 莫比烏斯函式有個性質 d n d 1 n 1 0 n 1 證明 n 1時,不做多餘說明。n 1 根據唯一分解定理,可以分解n ki 1pai i 對於那些含平方因子也就是存在ai 不為1的數,它的函式值為0,對答案沒有任何貢獻。所以我們來看看那些是互異素數乘積的數,每乙個成為它約數的數是什麼樣...