莫比乌斯反演详解

话说这是我打的第一篇算法博客2333

话不多说直接进入正题

一、莫比乌斯函数μ

什么是μ?

μ(n)={

    1,n=1;

    (-1)k,n=p1*p2*p3*……*pk ,pn为互不相等的质数;

    0,else;

    }

μ的性质:

1、积性函数:线性筛

在线性筛质数的基础上加几句处理就好了

void get()
{
    mu[1]=1;
    for(int i=2;i<=10000000;i++)
    {
        //cout<<i<<endl;
        if(!p[i])
        {
            mu[i]=-1;
            prime[++cnt]=i;
        }
        for(int j=1;prime[j]*i<=10000000&&j<=cnt;j++)
        {
            p[prime[j]*i]=1;
            if(i%prime[j]==0)break;
            mu[i*prime[j]]=-mu[i];
        }
    }
}

线性筛莫比乌斯函数

2、Σi=1nμ(i)=(i==1)

二、狄利克雷卷积

给定三个数论函数f,g,h,如果满足h(n)=Σd|nf(d)*g(n/d),那么我们称h=f*g,读作f卷g

狄利克雷卷积的性质:

1、交换律 f*g=g*f

2、结合律 f*g*h=f*(g*h)

3、分配律 f*(g+h)=f*g+f*h

三、积性函数的狄利克雷卷积特殊性质

积性函数指对于所有互质的整数a和b有性质f(ab)=f(a)f(b)的数论函数。

常见积性函数:

μ

φ

d d(n)=Σk|n1

δ δ(n)=Σk|nk

还有三个及其重要的完全积性函数,就是说任意a,b,满足f(a)*f(b)=f(a*b),他们是

e e(n)=(n==1)(这个函数也有管他叫ε的,但他太难打了,就叫e吧)

I I(n)=1

id id(n)=n

不要看他们式子简单,他们可是莫比乌斯反演的核心,建议找张纸把他们抄下来,免得忘

根据上面的狄利克雷卷积,我们有

μ*I=e

又由e的式子,我们有

f*e=f,f是任意数论函数

然后就开始推式子了

设f=g*I,f,g均为积性函数

在两边同时卷上μ,则

f*μ=g*I*μ

I*μ=e,g*e=g

所以有 f*μ=g

即:

若f=g*I,则g=f*μ

然后就是上述几个积性函数的综合

μ*I=e

φ*I=id===>φ=id*μ

I*I=d

I*id=δ

四、数论分块

给定n,求(Σd=1 ⌊n /d⌋)%998244353,n<=1e14

直接枚举gg

考虑优化

我们发现,⌊n/d⌋是有可能等于⌊n/(d+1)⌋的

那我们为什么要重复算呢??

直接加就好了!!

那也就是说,对于一个i,我们要找到一个j,使得⌊n/i⌋=⌊n/(i+1)⌋=⌊n/(i+2)⌋=……=⌊n/j⌋!=n/(j+1)

那么,根据数学的一顿乱搞,我们得出

j=⌊n/(⌊n/i⌋)⌋

于是就可以优化了

可以证明优化的幅度是O(sqrt(n))的,但我不会

那就代码了

for(ll i=1,j;i<=n;i=j+1)
{
j=n/(n/i);
ans=(ans+(j-i+1ll)%M*(n/i)%M)%M;
}

数论分块

五、莫比乌斯反演

先来一道热身题:

求Σi=1nΣj=1mgcd(i,j)==1,n,m<=1e7,T<=1e4

可以先自己试一试

开始化简

后面等于1的形式一看就是e

考虑e=I*μ

则原式=Σi=1nΣj=1mΣd|gcd(i,j)μ(d)

考虑枚举d

Σd=1min(n,m)μ(d)*Σi=1nΣj=1md|gcd(i,j)

考虑d|gcd(i,j)的意义

当且仅当d|i&&d|j时,d|gcd(i,j)

因此,原式可化为

Σd=1min(n,m)μ(d)*Σi=1nd|iΣj=1md|j

加个括号

Σd=1min(n,m)μ(d)*(Σi=1nd|i)*(Σj=1md|j)

(Σi=1nd|i)=⌊n/d⌋,j=1md|j)=⌊m/d⌋

因此原式可化为Σd=1min(n,m)μ(d)*⌊n/d⌋*⌊m/d⌋

显然可以数论分块O(n+T*sqrt(n))

原文地址:https://www.cnblogs.com/yanghaokun/p/11070013.html

时间: 2024-11-11 18:04:36

莫比乌斯反演详解的相关文章

HDU 4746 (莫比乌斯反演) Mophues

这道题看巨巨的题解看了好久,好久.. 本文转自hdu4746(莫比乌斯反演) 题意:给出n, m, p,求有多少对a, b满足gcd(a, b)的素因子个数<=p,(其中1<=a<=n, 1<=b<=m) 分析:设A(d):gcd(a, b)=d的有多少种      设B(j): gcd(a, b)是j的倍数的有多少种,易知B(j) = (n/j)*(m/j)      则由容斥原理得:(注:不同行的μ是不相同的,μ为莫比乌斯函数)      A(1) = μ(1)*B(1)

莫比乌斯反演2

\documentclass[12pt,UTF8,titlepage]{article} \usepackage[colorlinks,linkcolor=blue]{hyperref} \usepackage{fontspec} \usepackage{xunicode} \usepackage{xltxtra} \usepackage{amstext} \usepackage{amsmath} \usepackage{amssymb} \usepackage{listings} \usepa

【Project Euler】530 GCD of Divisors 莫比乌斯反演

[题目]GCD of Divisors [题意]给定f(n)=Σd|n gcd(d,n/d)的前缀和F(n),n=10^15. [算法]莫比乌斯反演 [题解]参考:任之洲数论函数.pdf 这个范围显然杜教筛也是做不了的,而且考虑直接化简f(n)也遇到了困难,所以考虑将前缀和的Σ一起化简. $$F(n)=\sum_{i=1}^{n}\sum_{d|i}(d,\frac{i}{d})$$ 这一步很常见的是第一重改为枚举倍数,但这样化简后面就推不下去了. 这道题必须最后转成$\sigma_0(n)$才

「莫比乌斯反演」

引入 在考虑\(F(n)=\sum\limits_{d|n}f(d)\)时,假设已知函数\(F\),能不能通过若干\(F(i)\)的加减得到\(f(j)\)呢?找规律后发现好像可以,并且好像用到的\(i\)都是\(j\)的因数.由此我们能不能通过给每个因子的\(F\)乘上一个系数,可以是0或1或-1,这样来得到\(f(j)\)呢?也就是,我们猜想是否有一个函数\(\mu\)能够使得\(f(n)=\sum\limits_{d|n}\mu(d)F(\dfrac{n}{d})\)呢?我们称这个过程为反

莫比乌斯反演入门解析

以下教程前半部分来自B站电子科技大学的视频 https://www.bilibili.com/video/av43470417?from=search&seid=9275043167445755699.菜鸡如我就还没看懂. 分割线后半部分教程来自 https://www.luogu.org/blog/An-Amazing-Blog/mu-bi-wu-si-fan-yan-ji-ge-ji-miao-di-dong-xi . 教程一 问题引入 给定整数 N 和 M .求满足 \(1 \leq x

HDU - 6715 - 算术 = 莫比乌斯反演

http://acm.hdu.edu.cn/showproblem.php?pid=6715 题意: 求:\(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}\mu(lcm(i,j))\),其中n,m是1e6范围内,10组. 不会,想了很久,也不知道假在哪里.大概是一开始方向就错了. 正解: 所求:\(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}\mu(lcm(i,j))\) 即:\(\sum\limits_{i=1}^

Spring事务管理(详解+实例)

写这篇博客之前我首先读了<Spring in action>,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下: Spring事务机制详解 Spring事务配置的五种方式 Spring中的事务管理实例详解 1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱. 比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱.这两个步骤必须是要么都执行要么都

转载:DenseNet算法详解

原文连接:http://blog.csdn.net/u014380165/article/details/75142664 参考连接:http://blog.csdn.net/u012938704/article/details/53468483 本文这里仅当学习笔记使用,具体细节建议前往原文细度. 论文:Densely Connected Convolutional Networks 论文链接:https://arxiv.org/pdf/1608.06993.pdf 代码的github链接:h

MariaDB(MySQL)创建、删除、选择及数据类型使用详解

一.MariaDB简介(MySQL简介略过) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品.在存储引擎方面,使用XtraDB(英语:XtraDB)来代替MySQL的InnoDB. MariaDB由MySQL的创始人Michael Widenius(英语:Michael Widenius)主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL A