莫比乌斯反演模板

#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);

}

 

全部评论

相关推荐

不愿透露姓名的神秘牛友
2024-12-30 18:02
程序员牛肉:1.可以标记一下自己的学校是985,有一些hr可能没想到你这个院校是985的。 2.简历所呈现出来的能力还是有点差的,苍穹外卖+黑马点评。这在java技术域里面也就是刚学三四个月的样子,大厂现在招人少,小厂又更加希望你能直接过来干活。就你简历上呈现出来的能力,确实是有点难找,肉眼可见的不懂技术。 第一个项目中:简单的使用redis也算是亮点嘛?使用jwt,threadlocal也算是亮点?你不就是调了几个包嘛?Nginx作为服务器也能写出来,这不是前端的活嘛? 第二个项目中:分布式锁+mq消息队列+Lua队列。真没啥好问的。属于面试官看一眼就阳痿的简历,没有任何想提问的欲望。 我给你建议是好好的挖一挖这个项目吧,其实苍穹外卖和黑马点评这两个项目很不错了,只不过是太烂大街了导致面试官没啥问的兴趣,所以不太推荐写简历上。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务