求 $$\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,對答案沒有任何貢獻。所以我們來看看那些是互異素數乘積的數,每乙個成為它約數的數是什麼樣...