51Nod 1244 莫比乌斯函数之和

Description

求\(\sum_{i=a}^b\mu(i),1\leqslant l\leqslant r\leqslant 10^{10}\)

Solution

杜教筛..贴代码..

Code

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const int N = 2000500;
const ll p = 1000000007;

int pr[N],cp,b[N],mu[N],smu[N];

void pre(int n) {
	mu[1]=1;
	for(int i=2;i<=n;i++) {
		if(!b[i]) pr[++cp]=i,mu[i]=-1;
		for(int j=1;j<=cp && i*pr[j]<=n;j++) {
			b[i*pr[j]]=1;
			if(i%pr[j]) mu[i*pr[j]]=-mu[i];
			else break;
		}
	}for(int i=1;i<=n;i++) smu[i]=(smu[i-1]+mu[i]);
//	for(int i=1;i<=10;i++) cout<<mu[i]<<" ";cout<<endl;
}
map<ll,ll> mp;
ll S(ll n) {
	if(n<=2000000) return smu[n];
	if(mp.count(n)) return mp[n];
	ll fn=1;
	for(ll i=2,j;i<=n;i=j+1) {
		j=n/(n/i);
//		cout<<n<<" "<<i<<" "<<j<<endl;
		fn=(fn-S(n/i)*(j-i+1));
	}return mp[n]=fn;;
}

int main() {
	pre(2000000);
	ll l,r;
	scanf("%lld%lld",&l,&r);
//	cout<<S(r)<<" "<<smu[r]<<endl;
//	cout<<S(l-1)<<" "<<smu[l-1]<<endl;
	printf("%lld\n",S(r)-S(l-1));
	return 0;
}

  

时间: 2024-08-04 22:42:08

51Nod 1244 莫比乌斯函数之和的相关文章

莫比乌斯函数之和 51Nod - 1244 (杜教筛)

莫比乌斯函数之和 51Nod - 1244 题意:

[51nod1244]莫比乌斯函数之和

题意:求区间[a,b]的莫比乌斯函数μ之和.  a,b<=10^11 题解:很容易把区间求和改为求前缀和并求差,即要求考虑化简 莫比乌斯函数存在一个性质,也就是$\sum_{d|n}^{ } \mu(d)= 1$,那么$\sum_{i=1}^{n}\sum_{d|n}^{ } \mu(d)= 1$ 这个式子比较复杂,我们转而考虑对于每一个d,它被计算了多少次,也就是$\sum_{i=1}^{n}\sum_{d=1}^{\lfloor n/i \rfloor} \mu(d)$ ,这个式子=$\su

【51nod-1239&amp;1244】欧拉函数之和&amp;莫比乌斯函数之和 杜教筛

题目链接: 1239:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1239 1244:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 杜教筛裸题,不过现在我也只会筛这俩前缀和... $$s(n)=\sum _{i=1}^{n}f(i)$$ 那么就有: $$\sum_{i=1}^{n}f(i)\lfloor \frac{n}{i} \

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

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

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

51nod1238 最小公倍数之和 V3 莫比乌斯函数 杜教筛

题意:求\(\sum_{i = 1}^{n}\sum_{j = 1}^{n}lcm(i, j)\). 题解:因为是用的莫比乌斯函数求的,所以推导比大部分题解多...而且我写式子一般都比较详细,所以可能看上去很多式子,实际上是因为每一步都写了,几乎没有跳过的.所以应该都可以看懂的. 末尾的\(e\)函数是指的\(e[1] = 1\),\(e[x] = 0(x != 1)\)这样一个函数 \[\sum_{i = 1}^{n}\sum_{j = 1}^{n}lcm(i, j)\] \[\sum_{i

【读书笔记】莫比乌斯函数与莫比乌斯反演

一.莫比乌斯(Möbius)函数 对于每个正整数n(n ≥ 2),设它的质因数分解式为: 根据这个式子定义n的莫比乌斯函数为: 也就是如果n有平方因子,则为0. 否则是-1的质因数个数次方. 举个简单的例子:6 = 2 × 3,所以:  9 = 3×3, 所以 [命题一] 对于正整数n有: 也就是n>2时,所有n的约数对应函数值之和为0. 证明: n=1的时候是显然的. n≥2时: ① 如果d中也含有平方因子,则其值为零. ② 设 , 若d中不含平方因子,则必有. 所以有: 得证. 二.欧拉函数

1240 莫比乌斯函数

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

数论入门——莫比乌斯函数,欧拉函数,狄利克雷卷积,线性筛,莫比乌斯反演,杜教筛

一个菜鸡对数论的一点点理解... 莫比乌斯函数 定义函数\(\mu(n)\)为: 当n有平方因子时,\(\mu(n)=0\). 当n没有平方因子时,\(\mu(n)=(-1)^{\omega(n)}\),\(\omega(n)\)表示n不同质因子的个数. 性质1: \(\sum_{d|n}\mu(d)=[n=1]\) 证明:我们把n分解质因数,则原式\(=(-1+1)^{\omega(n)}=0\). 因为对于不同的质因子,只有选和不选两种方案,这是一个组合数相加的形式,偶数加奇数减,根据二项式