能量采集 BZOJ

来源:互联网 发布:婚庆四件套 知乎 编辑:程序博客网 时间:2024/05/22 05:30

题目传送门

思路:这个题目可以用容斥来做
我们令f[x]为gcd(i, j) = x的个数
令g[x]为i, j因子为x的个数(n / x) * (m / x)
我们再把其中最大公约数不是x的减掉就是要求的答案了

#include <algorithm>#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#include <list>#include <map>#include <queue>#include <set>#include <stack>#include <string>#include <vector>#define MAXN 100010#define MAXE 5#define INF 0x7ffffff#define MOD 100003#define LL long long#define ULL unsigned long long#define pi 3.14159using namespace std;LL f[MAXN];int main() {    std::ios::sync_with_stdio(false);    LL n, m;    cin >> n >> m;    LL sum = 0;    for (LL i = min(n, m); i >= 1; --i) {        f[i] = (n / i) * (m / i);        for (LL j = 2 * i; j <= min(n, m); j += i) {            f[i] -= f[j];        }        sum += f[i] * (2 * i - 1);    }    cout << sum << endl;    return 0;}
原创粉丝点击