Mertens

题意:

求解$\sum_{i=a}^b{\mu(i)}$。

解法:

由$(\mu * I)(n) = e(n)$ 得 $\sum_{d|n}{\mu(d)} = [n=1]$ 得 $\mu(n) = \sum_{d|n,d<n}{\mu(d)}$

从而有$$\sum_{i=1}^n{\mu(i)} = 1 - \sum_{i=1}^n{ \sum_{d|i,d<i}{\mu(d)} }$$

    $$=1-\sum_{t=2}^n{ \sum_{d=1}^{[\frac{n}{t}]}{\mu(d)} }$$

记$S(n) = \sum_{i=1}^n{\mu(i)}$

从而有$S(n) = \sum_{t=2}^n{S([\frac{n}{t}])}$

考虑分块优化此式,产生$O(\sqrt n)$的时间复杂度,当n小于等于$n^{0.6667}$时直接应用线性筛计算。

分析得会产生$O(n^{0.667})$个n,从而应用map,递归计算即可。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <ctime>
 5 #include <map>
 6
 7 #define LL long long
 8 #define LIM 5000000
 9
10 using namespace std;
11
12 int tot,prime[LIM+10];
13 LL u[LIM+10];
14 bool v[LIM+10];
15 map<LL,LL> ansv;
16
17 LL S(LL n)
18 {
19     if(n<=LIM) return u[n];
20     if(ansv.count(n)) return ansv[n];
21     LL j;
22     LL ans=1;
23     for(LL i=2;i<=n;i=j+1)
24     {
25         j=n/(n/i);
26         ans -= (j-i+1LL) * S(n/i);
27     }
28     ansv[n]=ans;
29     return ans;
30 }
31
32 int main()
33 {
34 //    freopen("test.txt","r",stdin);
35     u[1]=1;
36     for(int i=2;i<=LIM;i++)
37     {
38         if(!v[i])
39         {
40             prime[++tot]=i;
41             u[i]=-1;
42         }
43         for(int j=1;i*prime[j]<=LIM;j++)
44         {
45             v[i*prime[j]]=1;
46             u[i*prime[j]]=u[i]*u[prime[j]];
47             if(i%prime[j]==0)
48             {
49                 u[i*prime[j]]=0;
50                 break;
51             }
52         }
53     }
54     for(int i=2;i<=LIM;i++) u[i]+=u[i-1];
55     LL a,b;
56     cin >> a >> b;
57     cout << S(b)-S(a-1) << endl;
58     return 0;
59 }

时间: 2025-01-03 15:21:58

Mertens的相关文章

埃拉托色尼筛法的复杂度估计与改进及线性时间筛法简介

本文介绍求出1~n内的所有素数的有效算法——埃拉托色尼筛法(the Sieve of Eratosthenes),估计其算法复杂度,并介绍其改进——线性时间筛法.以下内容谢绝转载.                                                                                                                                                                

Node.js 的模块系统

Node.js的模块系统是借鉴 CommonJS 的 Modules 规范实现的,因此,下面我们需要先了解 CommonJS 的 Modules 规范,希望对大家学习Node.js有所帮助. CommonJS 的 Modules 规范 CommonJS 对模块的定义非常简单,主要分为 模块引用.模块定义和模块标识三个部分. 1. 模块引用 - require() 方法 2. 模块定义 - module.exports 对象 3. 模块标识 - 传递给 require() 方法的参数 通过 Com

51Nod - 1240 莫比乌斯函数

莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先使用μ(n)(miu(n))作为莫比乌斯函数的记号.(据说,高斯(Gauss)比莫比乌斯早三十年就曾考虑过这个函数). 具体定义如下: 如果一个数包含平方因子,那么miu(n) = 0.例如:miu(4), miu(12), miu(18) = 0. 如果一个数不包含平方因子,并且有k个不同的质因子,那么miu(n) = (-1)^k.例如:miu(2), miu(3), miu(30) = -1,miu(1), mi

Html5学习之拖放操作详解

在html5页面开发中,拖放操作里面非常重要的一个点就是,我们要确定哪里发生了拖放事件.顾名思义,拖放事件,就是有脱(drag)事件和放(drop)事件. 拖放操作里面非常重要的一个点就是,我们要确定哪里发生了拖放事件.顾名思义,拖放事件,就是有脱(drag)事件和放(drop)事件. 当某个元素被拖动的时候,在这个元素上将被依次触发以下事件: 1. dragstart 2. drag 3. dragend 按下鼠标键并开始移动鼠标时,就会在被拖动元素上触发 dragstart 事件,随机触发 

莫比乌斯函数-质因数分解

1240 莫比乌斯函数 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先使用μ(n)(miu(n))作为莫比乌斯函数的记号.(据说,高斯(Gauss)比莫比乌斯早三十年就曾考虑过这个函数). 具体定义如下: 如果一个数包含平方因子,那么miu(n) = 0.例如:miu(4), miu(12), miu(18) = 0. 如果一个数不包含平方因子,并且有k个不同的质因子,那么miu(n)

51nod 1240 莫比乌斯函数 (质因数分解)

1240 莫比乌斯函数 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 取消关注 莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先使用μ(n)(miu(n))作为莫比乌斯函数的记号.(据说,高斯(Gauss)比莫比乌斯早三十年就曾考虑过这个函数). 具体定义如下: 如果一个数包含平方因子,那么miu(n) = 0.例如:miu(4), miu(12), miu(18) = 0. 如果一个数不包含平方因子,并且有k个不同的质因

无平方因子数的分布 (Ⅰ)

无平方因子数的分布(Ⅰ) Daoyi Peng May 23, 2015 ● 卷积方法余项估计 定义 1   乘性函数 $n\mapsto \mu^2(n)$, 其部分和 \begin{equation*}  Q(x):=\sum_{n\leqslant x}\mu^2(n)\end{equation*} 等于不超过 $x$ 的无平方因子整数的个数. 定理 1   当 $x$ 趋于无穷时, 有 \begin{equation*}  Q(x)=\frac{6}{\pi^2}x+O(\sqrt{x}

分析一个嵌入payload的恶意.lnk文件

原文:https://isc.sans.edu/diary/Analyzis+of+a+Malicious+.lnk+File+with+an+Embedded+Payload/20763 We received some feedback today from Nick, a SANS ISC reader who detected an interesting phishing campaign based on an ACE file. I also detected the same k

51nod1240莫比乌斯函数

莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先使用μ(n)(miu(n))作为莫比乌斯函数的记号.(据说,高斯(Gauss)比莫比乌斯早三十年就曾考虑过这个函数). 具体定义如下: 如果一个数包含平方因子,那么miu(n) = 0.例如:miu(4), miu(12), miu(18) = 0. 如果一个数不包含平方因子,并且有k个不同的质因子,那么miu(n) = (-1)^k.例如:miu(2), miu(3), miu(30) = -1,miu(1), mi