bzoj 2986 Non-Squarefree Numbers 容斥原理+数学

Posted copperoxide

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj 2986 Non-Squarefree Numbers 容斥原理+数学相关的知识,希望对你有一定的参考价值。

题面

题目传送门

解法

显然可以二分答案

计算的时候用容斥原理即可

用莫比乌斯函数实现这个过程即可

代码

#include <bits/stdc++.h>
#define LL long long
#define N 1000010
using namespace std;
int f[N], p[N], mu[N];
void sieve(){
    int len = 0, n = 1000000; mu[1] = 1;
    for (int i = 2; i <= n; i++) {
        if (!f[i]) p[++len] = i, mu[i] = -1;
        for (int j = 1; j <= len && i * p[j] <= n; j++) {
            f[i * p[j]] = true;
            if (i % p[j] == 0) {
                mu[i * p[j]] = 0;
                break;
            } else mu[i * p[j]] = -mu[i];
        }
    }
}
bool check(LL mid, LL k) {
    LL ret = 0;
    for (LL i = 1; i * i <= mid; i++)
        ret += mu[i] * (mid / (i * i));
    return mid - ret >= k;
}
int main() {
    sieve();
    LL k; cin >> k;
    LL l = 0, r = 210000000000ll, ans;
    while (l <= r) {
        LL mid = (l + r) >> 1;
        if (check(mid, k)) ans = mid, r = mid - 1;
            else l = mid + 1;
    }
    cout << ans << "
";
    return 0;
}

以上是关于bzoj 2986 Non-Squarefree Numbers 容斥原理+数学的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ 1827 洛谷 2986 [USACO10MAR]伟大的奶牛聚集Great Cow Gather

洛谷 P2986 [USACO10MAR]Great Cow Gat…(树形dp+容斥原理)

P2986 [USACO10MAR]伟大的奶牛聚集(思维,dp)

题解 P2986 [USACO10MAR]伟大的奶牛聚集

P2986 Great Cow Gathering G

洛谷 P2986 [USACO10MAR]伟大的奶牛聚集(树形动规)