莫比乌斯反演模板

Posted bpdwn-cnblogs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了莫比乌斯反演模板相关的知识,希望对你有一定的参考价值。

#include <bits/stdc++.h>

using namespace std;
const int mx = 1e5+5;
typedef long long ll;

bool vis[mx];
int sum[mx], prim[mx], mu[mx], cnt = 0;

void get_mu()
    mu[1] = 1;
    for(int i = 2; i< mx; i++)
        if(!vis[i]) 
            prim[++cnt] = i;
            mu[i] = -1;
        
        for(int j = 1; j <= cnt && prim[j]*i < mx; j++) 
            vis[prim[j]*i] = 1;
            if(i % prim[j] == 0) break;
            else mu[i*prim[j]] = -mu[i];
        
    
    sum[0] = 0;
    for (int i = 0; i < mx; i++) sum[i] = sum[i-1]+ mu[i];



int main() 
    get_mu();
    int n, m;
    scanf("%d%d", &n, &m);

    int len = min(n, m);
    int last;

    ll ans = 0;
    /*利用n/i连续区间数值相同的性质进行分块计算,可把复杂度降为sqrt(n) */
    for (int i = 1; i <= len; i=last+1) 
        last = min(n/(n/i), m/(m/i));
        ans += 1LL * (sum[last] - sum[i-1]) * (n/i) * (m/i);
    
    printf("%lld\n", ans);

 

以上是关于莫比乌斯反演模板的主要内容,如果未能解决你的问题,请参考以下文章

模板莫比乌斯反演

莫比乌斯反演的莫比乌斯反演的性质

莫比乌斯反演模板--Gym 101982B

模板 - 莫比乌斯反演

莫比乌斯反演模板

[模板]莫比乌斯反演