zoukankan      html  css  js  c++  java
  • bzoj4176

    题目


    (sumlimits^n_{i=1}{sumlimits^n_{J=1}{f(ij)}})

    (f(x))为x的约数个数

    题解

    题解

    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cstring>
    #include <unordered_map>
    using namespace std;
    const int N = 2000010;
    typedef long long ll;
    const int M = 1e9 + 7;
    const int r2 = 500000004;
    const int r6 = 166666668;
    ll T, n;
    int mu[N], prime[N], cnt;
    bool vis[N];
    unordered_map<ll, ll> mp_mu;
    ll sum_mu[N];
    
    ll S_mu(ll x) {
      if (x < N) 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 f(ll n) {
      ll res = 0;
      ll p = 1;
      while(p <= n) {
        ll nt = n / (n / p);
        res += (n / p) * (nt - p + 1) % M;
        res %= M;
        p = nt + 1;
      }
      return res;
    }
    
    void init() {
      mu[1] = 1;
      for(int i = 2; i < N; i++) {
        if(!vis[i]) {
          prime[cnt++] = i;
          mu[i] = -1;
        }
        for(int j = 0; j < cnt; j++) {
          int p = prime[j];
          if(1ll * p * i > N) break;
          vis[p * i] = 1;
          if(i % p == 0) {
            mu[i * p] = 0;
            break;
          }
          mu[i * p] = -mu[i];
        }
      }
      for(int i = 1; i < N; i++) {
        sum_mu[i] = sum_mu[i - 1] + mu[i];
        sum_mu[i] %= M;
      } 
    }
    
    int main() {
      init();
      ll n;
      cin >> n;
      ll res = 0;
      ll p = 1;
      while(p <= n) {
        ll nt = n / (n / p);
        ll k = f(n / p);
        res += k * k % M * (S_mu(nt) - S_mu(p - 1)) % M;
        res %= M;
        p = nt + 1;
      }
      cout << (res + M) % M << endl;
    }
    
  • 相关阅读:
    [Java IO]04_系统标准IO
    [Java IO]03_字符流
    [Java IO]02_字节流
    [Java IO]01_File类和RandomAccessFile类
    [Java 安全]加密算法
    [Java 安全]消息摘要与数字签名
    Java正则速成秘籍(三)之见招拆招篇
    Java正则速成秘籍(一)之招式篇
    Java 枚举
    redis 系列13 集合对象
  • 原文地址:https://www.cnblogs.com/limil/p/14093618.html
Copyright © 2011-2022 走看看