【专题】莫比乌斯反演

问题引入:

给定整数 N 和 M。求满足 1\leq x\leq N,1\leq y\leq M 且 gcd(x,y) 为质数的点对 (x,y) 的个数。

数据范围:1\leq N,M\leq 1,000,000

 

接下来会见到以下内容:

  • 莫比乌斯函数
  • 莫比乌斯函数的线性筛
  • 迪利克雷卷积介绍
  • 莫比乌斯反演
  • 整除分块
  • 杜教筛介绍

 

莫比乌斯函数:

\mu (n)=\left\{\begin{matrix} 1 &,n=1; \\ (-1)^{k}&,n=p1p2...pk; \\ 0&,else . \end{matrix}\right.

这里 else 是指:n有大于1的平方因子的情况,如,4、9、16等。

 

莫比乌斯函数的线性筛:

其实,莫比乌斯函数线性筛与普通的线性筛基本相同,只是多了一个 mu[MAXN] 数组罢了。

int prime[MAXN], prime_tot;//prime[MAXN]用于保存质数,prime_tot是质数的个数; 
bool prime_tag[MAXN];//标记是否为质数,false表示是质数,true表示合数; 
int mu[MAXN];//保存n的莫比乌斯函数值; 
void pre_calc(int lim){
	mu[1] = 1;
	for (int i = 2; i <= lim; ++i) {
		if(!prime_tag[i]) {
			prime[++prime_tot] = i;
			mu[i] = -1;
			//质数的莫比乌斯函数值必为-1; 
		}
		for (int j = 1; j <= prime_tot; ++j) {
			if(i * prime[j] > lim)break;
			prime_tag[i * prime[j] ] = true;
			//质数的倍数必是合数 
			if(i % prime[j] == 0) {
				//如果 i能被质数整除 说明 i中必有同一个质数因子
				//那么 i*prime[j] 就必有平方因子 
				mu[i * prime[j] ] = 0;
				break;
			}
			else {
				mu[i * prime[j] ] = -mu[i];
			}
		}
	} 
} 

 

狄利克雷卷积介绍:

狄利克雷卷积是函数之间的运算

狄利克雷卷积:(f*g)(n)=\sum_{d|n}f(d)g(\frac{n}{d})

积性函数:对于任意互质的整数 a和b 有性质 f(ab)=f(a)f(b)的函数。

完全积性函数:对于任意整数 a和b 有性质 f(ab)=f(a)f(b)的函数。

 

证明:\mu *\mathbf{1}=\varepsilon

设 n 不同的因子的个数为 k,则有

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值