题意:

求解$\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) = 1- \sum_{t=2}^n{S([\frac{n}{t}])}$

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

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

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <ctime>
#include <map> #define LL long long
#define LIM 5000000 using namespace std; int tot,prime[LIM+];
LL u[LIM+];
bool v[LIM+];
map<LL,LL> ansv; LL S(LL n)
{
if(n<=LIM) return u[n];
if(ansv.count(n)) return ansv[n];
LL j;
LL ans=;
for(LL i=;i<=n;i=j+)
{
j=n/(n/i);
ans -= (j-i+1LL) * S(n/i);
}
ansv[n]=ans;
return ans;
} int main()
{
// freopen("test.txt","r",stdin);
u[]=;
for(int i=;i<=LIM;i++)
{
if(!v[i])
{
prime[++tot]=i;
u[i]=-;
}
for(int j=;i*prime[j]<=LIM;j++)
{
v[i*prime[j]]=;
u[i*prime[j]]=u[i]*u[prime[j]];
if(i%prime[j]==)
{
u[i*prime[j]]=;
break;
}
}
}
for(int i=;i<=LIM;i++) u[i]+=u[i-];
LL a,b;
cin >> a >> b;
cout << S(b)-S(a-) << endl;
return ;
}

同样的方法,由$(\phi * I)(n) = id(n)$得到

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

注意n*(n+1)可能炸long long。

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <ctime>
#include <map>
#include <cassert> #define LL long long
#define LIM 5000000
#define P 1000000007LL using namespace std; int tot,prime[LIM+];
LL phi[LIM+],inv2;
bool v[LIM+];
map<LL,LL> ansv; LL S(LL n)
{
if(n<=LIM) return phi[n];
if(ansv.count(n)) return ansv[n];
LL j;
LL ans=n%P * (n%P + 1LL) %P * inv2%P;
assert(ans >=);
for(LL i=;i<=n;i=j+)
{
j=n/(n/i);
ans += P - ((j-i+1LL) * S(n/i)%P);
if(ans>=P) ans -= P;
}
ansv[n]=ans;
return ans;
} LL qpow(LL x,int n)
{
LL ans=;
for(;n;n>>=,x=x*x%P) if(n&) ans=ans*x%P;
return ans;
} int main()
{
// freopen("test.txt","r",stdin);
phi[]=;
for(int i=;i<=LIM;i++)
{
if(!v[i])
{
prime[++tot]=i;
phi[i]=i-;
}
for(int j=;i*prime[j]<=LIM;j++)
{
v[i*prime[j]]=;
phi[i*prime[j]]=phi[i]*phi[prime[j]];
if(i%prime[j]==)
{
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
}
}
inv2=qpow(,P-);
for(int i=;i<=LIM;i++)
{
phi[i]=phi[i]+phi[i-];
if(phi[i]>=P) phi[i] -= P;
}
LL n;
cin >> n;
cout << S(n) << endl;
return ;
}

Mertens的更多相关文章

  1. 51nod 1244 莫比乌斯函数之和

    题目链接:51nod 1244 莫比乌斯函数之和 题解参考syh学长的博客:http://www.cnblogs.com/AOQNRMGYXLMV/p/4932537.html %%% 关于这一类求积 ...

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

    原文:https://isc.sans.edu/diary/Analyzis+of+a+Malicious+.lnk+File+with+an+Embedded+Payload/20763 We re ...

  3. 51nod1244 莫比乌斯函数之和

    推公式.f[n]=1-∑f[n/i](i=2...n).然后递归+记忆化搜索.yyl说这叫杜教筛?时间复杂度貌似是O(n 2/3)的? #include<cstdio> #include& ...

  4. ### Paper about Event Detection

    Paper about Event Detection. #@author: gr #@date: 2014-03-15 #@email: forgerui@gmail.com 看一些相关的论文. 1 ...

  5. 51nod1240莫比乌斯函数

    莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先使用μ(n)(miu(n))作为莫比乌斯函数的记号.(据说,高斯(Gauss)比莫比乌斯早三十年就曾考虑过这个函数).   ...

  6. 51nod--1240莫比乌斯函数 (数论)

    题目: 1240 莫比乌斯函数 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先 ...

  7. 51 Nod 1240 莫比乌斯函数

    1240 莫比乌斯函数  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先使 ...

  8. 51Nod 1240:莫比乌斯函数

    1240 莫比乌斯函数  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先使 ...

  9. 使用开源软件 enfuse 做照片的曝光合成

    使用开源软件 enfuse 做照片的曝光合成 所谓曝光合成就是对同一场景用不同的曝光量拍摄多张照片,然后将这些照片再合成为一张照片.之所以我们要这么做是因为现在的相机感光的动态范围相比人眼实在是太小了 ...

随机推荐

  1. bootstrap之鼠标操作

    TouchLongClick package io.appium.android.bootstrap.handler; import android.os.SystemClock; import co ...

  2. div和img之间的缝隙问题

    这次做的项目,客户说.banner图的上下之间不要留有空隙,细致一看才发现,上下居然都有空隙.审查元素,发现全部的div,img的padding和margin都是0,对于这个间隙到底是假设产生的真的是 ...

  3. Mtk Camera

    MTK6577+Android之Camera驱动 http://blog.csdn.net/loongembedded/article/details/41695205 MTK Camera 开机启动 ...

  4. java 最长回文字串

      package string.string1_6; public class LongestPalidrome { /** * 使用常规方法, 以字符串的每一个字符作为中心进行判断, 包括奇数和偶 ...

  5. Spring Boot外部化配置实战解析

    一.流程分析 1.1 入口程序 在 SpringApplication#run(String... args) 方法中,外部化配置关键流程分为以下四步 public ConfigurableAppli ...

  6. idea 编辑yml文件没有联想功能,解决方案

    idea 编辑yml文件没有联想功能,解决方案 https://segmentfault.com/q/1010000010556550 按Ctrl+Shift+Alt+S,点Facets如果没有添加s ...

  7. Android 调用QQ登录

    调用QQ登录        在如今的项目开发.调用第三方登录.差点儿是必须的,而调用QQ登录也是不可缺少的,这里把相关代码分享出来,希望能拿去就能够用,降低项目开发的时间.希望对大家实用. 1,去QQ ...

  8. SEO大师分析的八条

  9. Eclipse中同时打开多个Console

    实现方法: 1.点击Open Console案例下拉三角,选择New Console View. 2.点击Pin Console按钮將两个控制台同时固定住. 3.点击Display Selected ...

  10. mongodb学习之:GridFS

    GridFS是一种在Mongodb中存储大二进制文件的机制.GridFS 用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片.音频.视频等). 使用GridFS有如下几个原因: 1 利用 ...