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) = 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的更多相关文章
- 51nod 1244 莫比乌斯函数之和
题目链接:51nod 1244 莫比乌斯函数之和 题解参考syh学长的博客:http://www.cnblogs.com/AOQNRMGYXLMV/p/4932537.html %%% 关于这一类求积 ...
- 分析一个嵌入payload的恶意.lnk文件
原文:https://isc.sans.edu/diary/Analyzis+of+a+Malicious+.lnk+File+with+an+Embedded+Payload/20763 We re ...
- 51nod1244 莫比乌斯函数之和
推公式.f[n]=1-∑f[n/i](i=2...n).然后递归+记忆化搜索.yyl说这叫杜教筛?时间复杂度貌似是O(n 2/3)的? #include<cstdio> #include& ...
- ### Paper about Event Detection
Paper about Event Detection. #@author: gr #@date: 2014-03-15 #@email: forgerui@gmail.com 看一些相关的论文. 1 ...
- 51nod1240莫比乌斯函数
莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先使用μ(n)(miu(n))作为莫比乌斯函数的记号.(据说,高斯(Gauss)比莫比乌斯早三十年就曾考虑过这个函数). ...
- 51nod--1240莫比乌斯函数 (数论)
题目: 1240 莫比乌斯函数 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先 ...
- 51 Nod 1240 莫比乌斯函数
1240 莫比乌斯函数 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先使 ...
- 51Nod 1240:莫比乌斯函数
1240 莫比乌斯函数 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先使 ...
- 使用开源软件 enfuse 做照片的曝光合成
使用开源软件 enfuse 做照片的曝光合成 所谓曝光合成就是对同一场景用不同的曝光量拍摄多张照片,然后将这些照片再合成为一张照片.之所以我们要这么做是因为现在的相机感光的动态范围相比人眼实在是太小了 ...
随机推荐
- Android Studio Ndk 编程
如今开发Android程序基本都已经从Eclipse转到了Android Studio了, 近期项目需求, 须要用到ndk编程, 于是就折腾了一下. 开发环境 Android Studio 1.5.1 ...
- 使用 Kingfisher 处理网络图片的读取与缓存
Kingfisher 是一个读取网络图片和处理本地缓存的开源库,由 onevcat 开发.提到图片缓存库,那么熟悉 Objective-C 开发的同学,可能会想起 SDWebImage. 没错,Kin ...
- 关于0基础磁盘管理(gpt UEFI...)最好的一篇文章(来自gentoo linux)
放链接:https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Disks 顺便几张图 watermark/2/text/aHR0cDovL2 ...
- bvlc_reference_caffenet.caffemodel
#uncoding:utf-8 # set up Python environment: numpy for numerical routines, and matplotlib for plotti ...
- longestIncreasingSequence最长上升子序列问题
package dp; /** * 最长上升子序列问题 */ public class LongestIncreasingSubsequence { /** * 原始dp * @param arr * ...
- 《UNIX 网络编程 第二版》编译环境的搭建( 运行本专栏代码必读 )
第一步:搭建基本的编译环境 安装gcc, g++, bulid-essential等编译软件 第二步:下载本书示例源码包 可在这里下载http://ishare.iask.sina.com.cn/f/ ...
- WPF学习专题
http://developer.51cto.com/art/200809/88207.htm
- 构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统(62)-EF链接串加密
前言: 这一节提供一个简单的功能,这个功能看似简单,找了一下没找到EF链接数据库串的加密帮助文档,只能自己写了,这样也更加符合自己的加密要求 有时候我们发布程序为了避免程序外的SQL链接串明文暴露,需 ...
- Theseven relationsarein threecategories:equivalent, congruent, andsimilar.
http://www.math.pitt.edu/~xfc/math2370/chap5.pdf
- Linux就该这么学--命令集合7(管道命令符)
1.管道命令符“|”的作用是将前一个命令的标准输出当作后一个命令的标准输入,格式为:“命令A|命令B”. 找出被限制登录用户的命令是:grep "/sbin/nologin" /e ...