• P4213 【模板】杜教筛(Sum)


    思路:杜教筛模板题。

    #include <algorithm>
    #include <cstdio>
    #include <cstring>
    #include <map>
    using namespace std;
    const int maxn = 2000010;
    typedef long long ll;
    ll T, n, pri[maxn], cur, mu[maxn], sum_mu[maxn];
    bool vis[maxn];
    map<ll, ll> mp_mu;
    ll S_mu(ll x) {
      if (x < maxn) return sum_mu[x];
      if (mp_mu[x]) return mp_mu[x];
      ll ret = 1ll;
      for (ll i = 2, j; i <= x; i = j + 1) {
        j = x / (x / i);
        ret -= S_mu(x / i) * (j - i + 1);
      }
      return mp_mu[x] = ret;
    }
    ll S_phi(ll x) {
      ll ret = 0ll;
      for (ll i = 1, j; i <= x; i = j + 1) {
        j = x / (x / i);
        ret += (S_mu(j) - S_mu(i - 1)) * (x / i) * (x / i);
      }
      return ((ret - 1) >> 1) + 1;
    }
    int main() {
      scanf("%lld", &T);
      mu[1] = 1;
      for (int i = 2; i < maxn; i++) {
        if (!vis[i]) {
          pri[++cur] = i;
          mu[i] = -1;
        }
        for (int j = 1; j <= cur && i * pri[j] < maxn; j++) {
          vis[i * pri[j]] = true;
          if (i % pri[j])
            mu[i * pri[j]] = -mu[i];
          else {
            mu[i * pri[j]] = 0;
            break;
          }
        }
      }
      for (int i = 1; i < maxn; i++) sum_mu[i] = sum_mu[i - 1] + mu[i];
      while (T--) {
        scanf("%lld", &n);
        printf("%lld %lld
    ", S_phi(n), S_mu(n));
      }
      return 0;
    }
  • 相关阅读:
    stompjs使用
    WKWebView新窗口打开链接
    iOS实现自定义拍照页面
    Universal Link
    社群app开发问题记录
    C#中try catch finally
    如何生成代码项目的工程结构
    C# SqlSugar基于 .NET 开源ORM框架
    C# DataGridView 行和列的操作
    禁止EditText 自动弹出软键盘
  • 原文地址:https://www.cnblogs.com/2462478392Lee/p/13774273.html
Copyright © 2020-2023  润新知