日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BZOJ 4833: [Lydsy1704月赛]最小公倍佩尔数(数论 + 最值反演)

發布時間:2023/12/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BZOJ 4833: [Lydsy1704月赛]最小公倍佩尔数(数论 + 最值反演) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題面

\({(1+\sqrt 2)}^n=e(n)+f(n)*\sqrt2\) ,其中 \(e(n),f(n)\) 都是整數,顯然有 \({(1-\sqrt 2)}^n=e(n)-f(n)*\sqrt 2\) 。

\(g(n)\) 表示 \(f(1),f(2)…f(n)\) 的最小公倍數,給定兩個正整數 \(n\)\(p\) ,其中 \(p\) 是質數,并且保證 \(f(1),f(2)…f(n)\) 在模 \(p\) 意義下均不為 \(0\) .

請計算\(\displaystyle \sum_{i=1}^{n} i*g(i)\) .其在模 \(p\) 的值。

\(T \le 210, \sum n \le 3 \times 10^6\)

題解

其實它就是給你了 \(f(n)\) 的特征方程,其實可以解出來,具體來說 遞推式到通相式 直接待定系數,解回去就把系數代回去就行了。

但是沒有必要,\(f(n)\) 是個能打表的東西。
\[ f(n) = \begin{cases} 0, &n = 0 \\ 1, &n = 1 \\ 2f(n - 1) + f(n-2) &\mathrm{otherwise} \end{cases} \]

然后它具有和 \(fib(i)\) 一樣的性質, \(\gcd (f(i), f(j)) = f(\gcd(i, j))\)

至于證明,可以類似 \(fib(i)\) 的性質證明。

然后考慮最值反演:

不會的話可以看我 這篇博客 。

然后我們可以把這個對于 \(\mathrm{lcm}\) 放到指數上來就是所有指數的 \(\max\) ,那么我們可以用最值反演變成 \(\min\) ,也就是 \(\gcd\)

形式如下
\[ \mathrm{lcm}(S) = \prod_{T \subseteq S, T \not = \varnothing} \gcd(T)^{(-1)^{|T|-1}} \]

然后我們利用這個性質進行推導。

\[ \begin{align} g(n) &= \prod_{T \subseteq S, T \not = \varnothing} \gcd_{x \in T}\{f(x)\}^{(-1)^{|T|+1}} \\ &= \prod_{T \subseteq S, T \not = \varnothing} f(\gcd(T))^{(-1)^{|T|+1}}\\ \end{align} \]

然后考慮構造一個函數 \(h\) 滿足
\[ f(n) = \prod_{d|n} h(d) \]

由于在模素數意義下,所以必定存在 \(h\) 滿足要求。

然后我們考慮每個 \(h(d)\) 的貢獻:
\[ \begin{align} \Rightarrow g(n) &= \prod_{d = 1}^{n} h(d)^{\sum_{T\subseteq S, T \not = \varnothing}[d | \gcd(T)](-1)^{|T|+1}} \\ &= \prod_{d = 1}^{n} h(d) \end{align} \]

至于上面那個系數為什么 \(=1\) 呢?可以考慮 \(T\) 集合中所有為 \(d\) 倍數的數構成的所有集合,剛好是 \(2^k - 1\) 的,除去空集,那么剩下的一一抵消,剩下一個 \(1\) 的貢獻。

考慮求出 \(h\) 是可以枚舉倍數來優化到 \(O(n \ln n)\) 的。

具體來說假設我們 \(<n\) 的所有 \(h\) 都求好了,那么當前的 \(\displaystyle h(n) = f(n) \prod_{d|n, d \not = n} \frac{1}{h(d)}\) 。

其實可以用莫比烏斯反演推回去的,但沒必要篩 \(\mu\) 。

那么能不能用線性篩優化到 \(O(n)\) 呢?似乎是不行的,因為 \(h\) 不是積性的,我們知道 \(h(i)\)\(h(p)\) 無法推出 \(h(i \times p)\) 。

然后最后復雜度就是 \(O(\sum n \ln n)\) 的。

總結

對于有些看起來不太好求的 \(\mathrm{lcm}\) 題,考慮最值反演。然后考慮構造積性函數,最后求出積性函數求回來就行了。

代碼

/**************************************************************Problem: 4833User: zjp_shadowLanguage: C++Result: AcceptedTime:5908 msMemory:13024 kb ****************************************************************/#include <bits/stdc++.h>#define For(i, l, r) for(register int i = (l), i##end = (int)(r); i <= i##end; ++i) #define Fordown(i, r, l) for(register int i = (r), i##end = (int)(l); i >= i##end; --i) #define Set(a, v) memset(a, v, sizeof(a)) #define Cpy(a, b) memcpy(a, b, sizeof(a)) #define debug(x) cout << #x << ": " << (x) << endl #define DEBUG(...) fprintf(stderr, __VA_ARGS__)using namespace std;typedef long long ll;template<typename T> inline bool chkmin(T &a, T b) {return b < a ? a = b, 1 : 0;} template<typename T> inline bool chkmax(T &a, T b) {return b > a ? a = b, 1 : 0;}inline int read() {int x(0), sgn(1); char ch(getchar());for (; !isdigit(ch); ch = getchar()) if (ch == '-') sgn = -1;for (; isdigit(ch); ch = getchar()) x = (x * 10) + (ch ^ 48);return x * sgn; }void File() { #ifdef zjp_shadowfreopen ("4883.in", "r", stdin);freopen ("4883.out", "w", stdout); #endif }const int N = 1e6 + 1e3;int Mod, h[N], g[N], ans[N];ll fpm(ll x, int power) {ll res = 1;for (; power; power >>= 1, (x *= x) %= Mod)if (power & 1) (res *= x) %= Mod;return res; }void Solve(int maxn) {h[1] = 1;For (i, 2, maxn)h[i] = (h[i - 1] * 2ll + h[i - 2]) % Mod;For (i, 2, maxn) {int inv = fpm(h[i], Mod - 2);for (int j = i * 2; j <= maxn; j += i)h[j] = 1ll * h[j] * inv % Mod;}g[0] = 1; int ans = 0;For (i, 1, maxn) {g[i] = 1ll * g[i - 1] * h[i] % Mod;ans = (ans + 1ll * g[i] * i) % Mod;}printf ("%d\n", ans); }int main () {File();int cases = read();while (cases --) {int n = read(); Mod = read(); Solve(n);}return 0;}

轉載于:https://www.cnblogs.com/zjp-shadow/p/9754566.html

總結

以上是生活随笔為你收集整理的BZOJ 4833: [Lydsy1704月赛]最小公倍佩尔数(数论 + 最值反演)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。