首页 > 其他分享 >莫比乌斯反演乱写

莫比乌斯反演乱写

时间:2023-09-21 12:11:09浏览次数:44  
标签:gcd limits 乱写 sum mid mu 反演 int 莫比

太久没有写莫反的题,忘完了。。。 简单写写当总结

常见数论函数

\(e(x) = [x = 1]\)
\(I(x) = 1\)
\(id(x) = x\)
以上函数完全积性

\(\varphi(x) = \sum \limits_{i = 1}^{x - 1} [\gcd(i, x) == 1]\)
\(\mu = I ^{-1}\)
\(d(x) = \sum \limits_{i = 1} ^ {x} [i \mid x]\)
以上是积性函数

狄利克雷卷积

若 \(F(n) = \sum \limits_{d \mid n} f(d) * g(n / d)\),则称 \(F = f * g\)
\(\mu * I = e\) (定义)
\(\varphi * I = id\) (\(\varphi\) 的性质, 其实是用莫反证的)
\(d = I * I\)

莫比乌斯函数

考虑 \(\mu(p ^ k)\)的值 (\(p \in primes\))
由\(\mu * I = e\),得到\(\mu(p) = 1, \mu(p ^ 2) = -1\),再用归纳法得到 \(k > 1\)时\(\mu(p ^ k) = 0\)
由于\(\mu\)是积性函数,所以\(\mu(n = p_1^{k_1} * p_2^{k_2} * ... p_x ^{k_x})\) = \(\mu(p_1^{k_1}) * ... *\mu(p_x ^{k_x})\)
所以有
image

莫比乌斯反演

已知 \(F(n) = \sum \limits_{d \mid n} f(d)\),考虑求\(f(n)\)

由卷积定义有 \(F = f *I\), 考虑两边同时乘 \(I ^ {-1}\) 即 \(\mu\) 得到 \(F * \mu = f\)

所以 $f(n) = \sum \limits_{d \mid n} F(d) * \mu(n/d) $

拓展形式:已知 \(F(n) = \sum \limits_{n \mid d} f(d)\)
那么 \(f(n) = \sum \limits_{n \mid d} f(d) * \mu(d/n)\)

同时由于 \(\mu * I = e\),所以有 \(\sum \limits_{d \mid n} \mu(d) = [n=1]\)
又因为注意到\([n=m] = [n \mid m] * [\frac{m}{n} = 1]\)
将最后一项用代换有 \([n=m] = [n \mid m] * \sum \limits_{d \mid \frac{m}{n}} \mu(d)\)

应用

求 \(\sum \limits_{i=1}^n \sum \limits_{j=1}^n [\gcd(i,j) = 1]\)

\( \begin{aligned} 设f(n) & = \sum \limits_{i=1}^n \sum \limits_{j=1}^n [\gcd(i,j) = 1] \\ & = \sum \limits_{i=1}^n \sum \limits_{j=1}^n \sum \limits_{d \mid i,d \mid j} \mu(d)\\ & = \sum \limits_{d=1}^n \sum \limits_{d \mid i} \sum\limits_{d \mid j} \mu(d)\\ & = \sum \limits_{d=1}^n \mu(d) (n/d) ^2 \end{aligned} \)
然后对于 \(\mu\)做前缀和,对\(n/d\)整除分块即可
预处理\(O(n)\),单次询问复杂度\(O(\sqrt n)\)

求 \(\sum \limits_{i=1}^n \sum \limits_{j=1}^n [\gcd(i,j) = d]\)

等价于 \(\sum \limits_{i=1}^{n/d} \sum \limits_{j=1}^{n/d} [\gcd(i,j) = 1]\),就转化成了上一个问题

点击查看代码
auto calc = [&](int n, int d) {
        n /= d;
        int l = 1, r = 0;
        ll ret = 0;
        for (; l <= n; l = r + 1) {
            r = std::min(n / (n / l), n);
            ret += 1ll * (sum[r] - sum[l - 1]) * (n / l) * (n / l);
        }
        return ret;
    };

求\(\sum \limits_{i=1}^n \sum \limits_{j=1}^n [\gcd(i,j) \in primes]\)

等价于 \(\sum \limits_{p \leq n, p \in primes} f(n/p)\)
复杂度是 \(O(\frac{n}{\log n})\)的,证明不会,好像要用积分

P5221 Product

\( \begin{aligned} & \prod \limits_{i=1}^n \prod \limits_{j=1}^n \frac{lcm(i,j)}{gcd(i,j)} \\ & = \prod \limits_{i=1}^n \prod \limits_{j=1}^n \frac{i * j}{gcd(i,j) ^2}\\ \end{aligned} \)

上面部分很好算,考虑下半部分的\(\prod \limits_{i=1}^n \prod \limits_{j=1}^n {gcd(i,j)},可以枚举\gcd为\)d$的数对个数算贡献

\( \begin{aligned} & \prod \limits_{d=1}^n d ^{\sum\limits_{i=1}^n \sum \limits_{j=1}^n [\gcd(i,j)=d]}\\ & \prod \limits_{d=1}^n d ^{f(n/d)} \end{aligned} \)

然后由于\((n/d)\)的值只有\(O(\sqrt n)\)种,每次算是\(O(\sqrt n)\)的,莫反总复杂度是\(O(n)\)
总复杂度为\(O(n \log n)\)的,瓶颈在于快速幂

谴责出题人\(1e6\)只开200ms,还卡空间

点击查看代码
#include <bits/stdc++.h>

const int MAXN = 1e6 + 5;

int mu[MAXN], pr[100005], cnt;
bool vis[MAXN];

void primes(int n) {
    mu[1] = 1;
    for (int i = 2; i <= n; i++) {
        if (!vis[i]) {
            pr[++cnt] = i;
            mu[i] = -1;
        }
        for (int j = 1; j <= cnt; j++) {
            int x = i * pr[j];
            if (x > n) break;
            vis[x] = 1;
            if (i % pr[j] == 0) {
                mu[x] = 0;
                break;
            } 
            mu[x] = -mu[i];
        }
    }
    for (int i = 2; i <= n; i++) mu[i] += mu[i - 1]; 
}

#define ll long long
const int MOD = 104857601;

int power(int a, int b) {
    int ret = 1;
    for (; b; b >>= 1) {
        if (b & 1) ret = (1ll * ret * a) % MOD;
        a = (1ll * a * a) % MOD;
    }
    return ret;
}

void solve() {
    int n;
    std::cin >> n;
    primes(n + 1);
    int mul = 1, ans = 1;
    for (int i = 1; i <= n; i++) {
        mul = 1ll * mul * i % MOD;
    }
    for (int i = 1; i <= n; i++) {
        ans = 1ll * ans * power(i, n) % MOD * mul % MOD;
    }
    auto calc = [&](int x) {
        ll ret = 0;
        int l = 1, r = 0;
        for (; l <= x; l = r + 1) {
            r = std::min(x, x / (x / l));
            ret += 1ll * (mu[r] - mu[l - 1]) * (x / l) * (x / l);
        }
        ret %= (MOD - 1);
        return (int)ret;
    };

    int div = 1, tmp;
    for (int d = 1; d <= n; d++) {
        if (d == 1 || ((n / d) != (n / (d - 1)))) tmp = calc(n / d);
        div = 1ll * div * power(d, tmp) % MOD;
    }
    div = 1ll * div * div % MOD;

    ans = 1ll * ans * power(div, MOD - 2) % MOD;

    std::cout << ans << "\n";
}

int main() {
    std::ios::sync_with_stdio(0);
    std::cin.tie(0);
    std::cout.tie(0);

    int t = 1;
    while (t--) {
        solve();
    }

    return 0;
}

标签:gcd,limits,乱写,sum,mid,mu,反演,int,莫比
From: https://www.cnblogs.com/cqbzlzh/p/17719346.html

相关文章

  • 【杂题乱写】AtCoder-ARC113
    AtCoder-ARC113AA*B*C枚举\(A,B\),那么\(C\in[1,\left\lfloor\frac{K}{AB}\right\rfloor]\),时间复杂度是\(O(K\logK)\)。提交记录:Submission-AtCoderAtCoder-ARC113BA^B^C\(A^k\)的末尾存在循环节,找到循环节长度\(|T|\),答案就是\(A^{B^C\bmod|T|}\bmod10\)。提......
  • 「学习笔记」莫比乌斯反演
    开新坑了。QWQ前置芝士:数论分块。(之后再说。QWQ)积性函数定义一个数论函数\(f(n)\)满足\(f(xy)=f(x)\timesf(y)\)(\(\gcd(x,y)=1\)),则称\(f(n)\)是积性函数。莫比乌斯函数:\(\mu(n)=\begin{cases}1&n=1\\0&n\\text{含有平方因子}\\(-1)^k&k\text{为}\n\\text{的......
  • 可持久化非确定状态AC自动分块维护线段平衡仙人掌优化最小费用最大流预处理混合图上莫
    P8946TheLostSymbol这种类型的dp的特点就是大部分转移形如\(f(i,j)\rightarrowf(i+1,j+1)\)之类的,并且当以上转移出现时原数组被清空,这就可以用一个deque来维护,然后对于全局赋值/全局加,需要对每个位置维护一个时间戳,并记录上一次赋值/加是什么时候,以便标记下传。(貌似......
  • 南京大学计算机拔尖班2023选拔考试乱写
    题目是从这里搬的第一题(20分)在黑板上写有2023个1,下面进行2022次如下操作:擦掉黑板上任意两个数\(a,b\)并写下\(a+b\)或者\(\min\{a^2,b^2\}\),最后只剩下一个数,记这个数字最大可能值为\(r\),求证\(\displaystyle2^{\frac{2023}3}<r<3^{\frac{2023}3}\)【Solution】......
  • 『学习笔记』莫比乌斯反演
    对前置知识的再补充欧拉函数:其中一个性质:\[n=\sum_{d\midn}\varphi(d).\]用狄利克雷卷积表示:\[\operatorname{id}=\varphi*1.\]莫比乌斯函数:其中一个性质(或叫做定义式):\[\sum_{d\midn}\mu(d)=[n=1].\]用狄利克雷卷积表示:\[\varepsilon=\mu*1.\]......
  • ENVI+ERDAS实现Hyperion叶绿素含量反演:经验比值法、一阶微分法
    本文介绍基于ENVI与ERDAS软件,依据Hyperion高光谱遥感影像,采用经验比值法、一阶微分法等,对叶绿素含量等地表参数加以反演的具体操作。目录1前期准备与本文理论部分1.1几句闲谈1.2背景知识1.2.1Hyperion数据介绍1.2.2遥感图像分类方法1.2.3大气校正1.2.4反演算法2基于经验......
  • 反演小记
    反演反演,可以理解为两个事物通过某种关系的互相转化。基本推论设\(F,G\),满足\(F(n)=\sumV[n,i]G(i)\),其中\(V\)为矩阵,将\(F,G\)看成列向量,可以写做\(F=V*G\),那么我们可以容易推出\(G=V^{-1}*F\),这就是反演的过程,而一些特殊的反演即是利用了\(V\)和\(V^{-1}......
  • 【算法学习笔记】max-min容斥 极值反演
    max-min容斥(极值反演)即为下式;\[\begin{equation}\max\{S\}=\sum_{T\subseteqS}(-1)^{|T|+1}\min\{T\}\label{aa}\end{equation}\]\[\begin{equation}\min\{S\}=\sum_{T\subseteqS}(-1)^{|T|+1}\max\{T\}\label{ab}\end{equation}\]证明:证明\(\ref......
  • 「学习笔记」莫比乌斯反演
    「学习笔记」莫比乌斯反演点击查看目录目录「学习笔记」莫比乌斯反演前置知识整除分块积性函数线性筛任意积性函数莫比乌斯反演莫比乌斯函数莫比乌斯反演公式例题[HAOI2011]ProblembYY的GCD[SDOI2014]数表DZYLovesMath[SDOI2015]约数个数和[SDOI2017]数字表格于神之......
  • 【杂题乱写】USACO 2022 DEC
    BronzeT1CowCollege暴力扫一遍,更新最大值。提交记录:Submission-LuoguT2FeedingtheCows贪心放,维护一个能分别被\(\texttt{G}\)和\(\texttt{H}\)覆盖到的最远位置,如果当前位置\(i\)覆盖不到就在\(i+k\)放一个新的。由于\(i\)各不相同,这样放置除了可能在\(n\)......