bzoj2693:jzptab

Pre

神奇的线性筛。

交的时候忘了对答案加上\(mod\)再%\(mod\)

然后0分,才发现只有一个测试点。

Solution

不管前面的,式子最后是\((n>m)\)

\(\sum\limits_{T=1}^{m} (\sum\limits_{i=1}^{\lfloor \frac{n}{T}\rfloor} i) \times (\sum\limits_{i=1}^{\lfloor \frac{m}{T} \rfloor} i) \times \sum\limits_{d|T} T\times \mu (d) \times d\)

然后我就不会了,以为推错了。

实际上,最后的那个

\(\sum\limits_{d|T} T\times \mu (d) \times d\)

可以线性筛。

具体看代码。

Code

#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define xx first
#define yy second
#define mod 100000009
 
using namespace std;
const int N = 10000000 + 5, M = 10000000;
bool vis[N];
int pri[N], tot;
ll sum[N];
inline void init ();
inline ll cal (ll, ll);

int main () {
    init ();
    int t;
    scanf ("%d", &t);
    while (t--) {
        int n, m;
        scanf ("%d%d", &n, &m);
        if (n < m) {
            swap (n, m);
        }
        int l = 1, r;
        ll res = 0;
        while (1) {
            if (l > m) {
                break;
            }
            r = min (n / (n / l), m / (m / l));
            res += cal (n / l, m / l) * (sum[r] - sum[l - 1]);
            res = (res + mod) % mod;
            l = r + 1;
        }
        printf ("%lld\n", (res + mod) % mod);
    }
    return 0;
}

inline ll cal (ll u, ll v) {
    ll tmp = v * (v + 1) / 2 % mod;
    ll tmp2 = u * (u + 1) / 2 % mod;
    return tmp * tmp2 % mod;
}

inline void init () {
    sum[1] = 1;
    for (int i = 2; i <= M; ++i) {
        if (!vis[i]) {
            pri[++tot] = i;
            sum[i] = 1 - i;
        }
        for (int j = 1; j <= tot; ++j) {
            if (1LL * pri[j] * i >= M) {
                break;
            }
            vis[pri[j] * i] = 1;
            if (i % pri[j] == 0) {
                sum[pri[j] * i] = sum[i];
                break;
            }
            sum[pri[j] * i] = (sum[i] * sum[pri[j]] % mod + mod) % mod;
        }
    }
    for (int i = 2; i <= M; ++i) {
        sum[i] = sum[i] * i % mod;
        sum[i] = (sum[i] + sum[i - 1] + mod) % mod;
    }
}

Conclusion

这个线性筛可谓惊天地泣鬼神,它利用了莫比乌斯函数质数与合数的神奇性质,也就是说以后可以考虑对于这种东西乱搞,看能不能用这种东西解决。

猜你喜欢

转载自www.cnblogs.com/ChiTongZ/p/11163168.html
今日推荐