TLE 92分求助
查看原帖
TLE 92分求助
182533
Akwamaryna楼主2021/12/30 13:27
// Per aspera ad astra.
// 1004535809
#include <cctype>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#define re register
#define br break
#define co continue
#define ll long long
#define DEBUG if (dbg)
#ifndef ABC
#define getchar() (_S == _T && (_T = (_S = _B) + fread(_B, 1, 1 << 15, stdin), _S == _T) ? EOF : *_S++)
#endif
char _B[1 << 15], *_S = _B, *_T = _B;
ll fr() {
    re ll s = 0, f = 1;
    re char ch;
    for (; (ch = getchar()) < '0' || ch > '9'; ch == '-' ? f = -f : 0);
    for (; ch >= '0' && ch <= '9'; s = s * 10 + ch - '0', ch = getchar());
    return s * f;
}
int dbg = 0;
#include <map>
using namespace std;
const int N = 1e6;
template <class T> T cmin(re T a, re T b) {return a < b ? a : b;}
template <class T> T cmax(re T a, re T b) {return a > b ? a : b;}
template <class T> void cswp(re T &a, re T &b) {T t = a;a = b, b = t;}
struct OI {
    int rp, score;
} FJOI2022, CSPS2022;
map<int, ll> mp;
int cnt, tot; ll pr[N + 5], p[N + 5]; bool isp[N + 5];
ll n, m, k, phi[N + 5], mu[N + 5], _mu[N + 5], g[N + 5];
inline ll Alpha(re ll x) {return x / k * phi[k] + g[x % k];}
inline ll Beta(re ll x, re ll y) {return y ? Beta(y, x % y) : x;}
inline ll Gamma(re ll n) {
    if (n < N) return _mu[n];
    if (mp.count(n)) return mp[n];
    re ll ret = 1;
    for (re int l = 2, r; l <= n; l = r + 1) {
        r = n / (n / l);
        ret -= Gamma(n / l) * (r - l + 1);
    }
    return mp[n] = ret;
}
inline ll Delta(re ll p, re ll q) {
    if (!p) return 0;
    if (q == 1) return Gamma(p);
    re ll ret = 0;
    for (re int i = 1; i <= cnt && pr[i] <= q; ++i)
        if (!(q % pr[i]) && mu[pr[i]]) ret += Delta(p / pr[i], pr[i]) * mu[pr[i]] * mu[pr[i]];
    return ret;
}
inline void Epsilon() {
    mu[1] = 1;
    for (re int i = 2; i <= N; ++i) {
        if (!isp[i]) mu[p[++tot] = i] = -1, phi[i] = i - 1;
        for (re int j = 1; j <= tot && i * p[j] <= N; ++j) {
            isp[i * p[j]] = 1;
            if (!(i % p[j])) {
                mu[i * p[j]] = 0, phi[i * p[j]] = phi[i] * p[j];
                break;
            }
            mu[i * p[j]] = -mu[i], phi[i * p[j]] = phi[i] * (p[j] - 1);
        }
    }
    for (re int i = 1; i <= N; ++i) _mu[i] = _mu[i - 1] + mu[i];
    for (re int i = 1; i <= k; ++i) {
        g[i] = g[i - 1] + (Beta(i, k) == 1);
        if (!(k % i)) pr[++cnt] = i;
    }
}
inline ll Zeta() {
    re ll ret = 0, la = 0;
    for (re int l = 1, r; l <= cmin(n, m); l = r + 1) {
        r = cmin(n / (n / l), m / (m / l));
        re ll tmp = Delta(r, k);
        ret += (tmp - la) * (n / l) * Alpha(m / l);
        la = tmp;
    }
    return ret;
}
inline void Eta() {
    n = fr(), m = fr(), k = fr();
    Epsilon();
    printf("%lld\n", Zeta());
}
signed main() {
#ifndef ONLINE_JUDGE
    dbg = 1;
#endif
    ++FJOI2022.rp, ++FJOI2022.score, ++CSPS2022.rp, ++CSPS2022.score, 1004535809;
    
    return Eta(), 392699 ^ 392699;
}

提交记录

2021/12/30 13:27
加载中...