莫比乌斯反演做题笔记

[HAOI2011]PROBLEM B

https://ac.nowcoder.com/acm/problem/19983

[HAOI2011]Problem b

题意

组询问,给定 , 求 并且 = 的数对数量。

()

解题思路

  • 定义 表示 并且 满足 的数对数量。

容斥易得,本题的答案即是:

那么现在我们的目标是在 的时间内快速求出

考虑对于原式进行化简,原式即:

首先是把原式里面的 提出来:

下一步则是 转化为 :

又因为 : 等价于 &&

然后我们可以知道, 内的所有数中 的倍数一共有 个。所以式子进一步化简:

现在就可以整一个整除分块乱搞哩!1

#include <bits/stdc++.h>
using namespace std;
#define int long long
inline int read() {
    int x = 0, flag = 1;
    char ch = getchar();
    for( ; ch > '9' || ch < '0' ; ch = getchar()) if(ch == '-') flag = -1;
    for( ; ch >= '0' && ch <= '9'; ch = getchar()) x = (x << 3) + (x << 1) + ch - '0';
    return x * flag;
}

const int MAXN = 1e5 + 500;
int Prime[MAXN], mu[MAXN],tot = 0;
bool book[MAXN];
int T,a,b,c,d,k;

void GetPrime() {
    mu[1] = 1;
    for(int i = 2 ; i <= 6e4 ; i ++) {
        if(!book[i]) Prime[++ tot] = i, mu[i] = -1;
        for(int j = 1 ; j <= tot ; j ++) {
            if(Prime[j] * i > 6e4) break;
            book[Prime[j] * i] = 1;
            if(i % Prime[j] == 0) break;
            mu[i * Prime[j]] = -mu[i];
        }
    }
    for(int i = 1 ; i <= 6e4 ; i ++) mu[i] = mu[i - 1] + mu[i];
    return ;
}

int calc(int a, int b) {
    int Ans = 0;
    int mx=a / k, my = b / k;
    for(int l = 1 ,r ;l <= min (mx, my) ; l = r + 1) {
        r = min(mx / (mx / l), my / (my / l));
        Ans += (mx / l) * (my / l) * (mu[r] - mu[l - 1]);
    }
    return Ans;
}

signed main() {
    GetPrime();
    T = read();
    while(T --) {
        a = read(), b = read(), c = read(), d = read(); k = read();
        printf("%lld\n", calc(b, d) - calc(b, c - 1) - calc(a - 1, d) + calc(a - 1, c - 1));
    }
    return  0;
}
闲人碎语 文章被收录于专栏

刊载算法学习笔记以及一些题解

全部评论

相关推荐

叶扰云倾:进度更新,现在阿里云面完3面了,感觉3面答得还行,基本都答上了,自己熟悉的地方也说的比较细致,但感觉面试官有点心不在焉不知道是不是不想要我了,求阿里收留,我直接秒到岗当阿里孝子,学校那边的房子都退租了,下学期都不回学校,全职猛猛实习半年。这种条件还不诱人吗难道 然后现在约到了字节的一面和淘天的复活赛,外加猿辅导。华为笔试完没动静。 美团那边之前投了个base广州的,把我流程卡麻了,应该是不怎么招人,我直接简历挂了,现在进了一个正常的后端流程,还在筛选,不知道还有没有hc。
点赞 评论 收藏
分享
我知道自己这个念头不好,但是真的很羡慕😭大家的父母长辈都能帮到自己吗?
大飞的诡术妖姬:父母都是普通打工人,身体也不好,能供我读到本科毕业很不容易,毕业以后帮衬心里会有罪恶感。虽然可能会错过很多风景,但还是想活的心安理得。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务