首页 > 其他分享 >Solution - Atcoder Xmas2019E Sum of f(n)

Solution - Atcoder Xmas2019E Sum of f(n)

时间:2024-07-24 15:52:30浏览次数:12  
标签:lfloor Atcoder frac Sum Solution rfloor sqrt limB ll

考虑 \(F(n) = \sum\limits_{i = 1}^n f_i = \sum\limits_{i = 1}^n \sum\limits_{p\in \mathbb{P}, k\ge 1} [p^k | i] = \sum\limits_{p\in \mathbb{P}, k\ge 1} \lfloor\frac{n}{p^k}\rfloor\)。

对于这个 \(\lfloor\frac{n}{x}\rfloor\),一个比较经典的想法就是考虑对其整除分块,然后统计有多少个 \(p^k(p\in \mathbb{P}, k\ge 1)\) 在一个给定的区间 \((\lfloor\frac{n}{x}\rfloor, \lfloor\frac{n}{y}\rfloor]\) 里。

对于这个 \(p^k\),若 \(k > 1\) 做着便有些棘手,但是考虑到对于 \(k > 1\),\(p^k\) 的数量是极少的。
因为此时至少有 \(p\le \sqrt{n}\),所以 \(p\) 的数量是 \(\mathcal{O}(\frac{\sqrt{n}}{\log \sqrt{n}})\) 级别的,\(p^k(k > 1)\) 的数量的一个宽松的上界 \(\mathcal{O}(\sqrt{n})\),这部分直接暴力算即可。

于是接下来就只需要对 \(p\in \mathbb{P}\) 计数了。
然后对于这部分的求和,考虑前缀和的形式,变为求 \([1, \lfloor\frac{n}{x}\rfloor]\) 内质数的个数。
这部分就是经典的 Min25 筛的运用 LibreOJ 6235 区间素数个数

时间复杂度 \(\mathcal{O}(\frac{n^\frac{3}{4}}{\log n})\)。

#include<bits/stdc++.h>
using ll = long long;
const ll limn = 1e11, limB = (ll)sqrt(limn);
ll n, B;
int pr[limB + 1], vis[limB + 1], cnt;
int leq[limB + 1], geq[limB + 1], tot;
ll val[limB * 2 + 1], g[limB * 2 + 1];
inline int &id(ll x) {return x <= B ? leq[x] : geq[n / x];}
int main() {
   scanf("%lld", &n), B = sqrt(n);
   for (ll l = 1, r; l <= n; l = r + 1) {
      r = n / (n / l);
      val[id(n / l) = ++tot] = n / l, g[tot] = n / l - 1;
   }
   ll ans = 0;
   for (int i = 2; i <= B; i++) {
      if (! vis[i]) {
         for (int j = 1; j <= tot && val[j] >= 1ll * i * i; j++)
            g[j] -= g[id(val[j] / i)] - g[id(pr[cnt])];
         pr[++cnt] = i;
         for (ll x = 1ll * i * i; x <= n; x *= i)
            ans += n / x;
      }
      for (int j = 1; j <= cnt && i * pr[j] <= B; j++) {
         vis[i * pr[j]] = 1;
         if (i % pr[j] == 0)
            break;
      }
   }
   for (ll l = 1, r; l <= n; l = r + 1) {
      r = n / (n / l);
      ans += (n / l) * (g[id(r)] - g[id(l - 1)]);
   }
   printf("%lld\n", ans);
   return 0;
}

标签:lfloor,Atcoder,frac,Sum,Solution,rfloor,sqrt,limB,ll
From: https://www.cnblogs.com/rizynvu/p/18321064

相关文章

  • Solution - Atcoder Xmas2019D Sum of (-1)^f(n).md
    对于\(f(i)=(-1)^{\sum\limits_jc_j}(i=\prod\limits_jp_j^{c_j}(p_j\in\mathbb{P}))\),一个比较特殊的值就是在\(i\in\mathbb{P}\)时有\(f(i)=-1\)。于是考虑PowerfulNumber筛,构造积性函数\(g\)使得对于\(i\in\mathbb{P}\)有\(g(p)=f(p)\)且\(g\)易......
  • Texstudio正反向搜索-配合sumatraPDF
    选项->设置->命令,然后找到外部pdf查看器,输入代码:"C:\Users\Kevin\AppData\Local\SumatraPDF\SumatraPDF.exe"-forward-search"?c:am.tex"@-inverse-search"C:\ProgramFiles\texstudio\texstudio.exe%%f-line%%l""?am.pdf"......
  • AtCoder Beginner Contest 363
    AtCoderBeginnerContest363前言只出了三题,被d卡住了,事实上e题应该对我而言更简单,没及时换题。A-PilingUp(atcoder.jp)思路代码#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;intmain(){ios::sync_with_stdio(false);cin.......
  • SMU Summer 2024 Contest Round 6
    1.TakandCards原题链接:http://162.14.124.219/contest/1010/problem/B设dp[i][j][k]是在前i个数中选j(j>=1)个数、其和为k的方案总数。第i个数有选与不选2种可能,由此得出转移方程dp[i][j][k]=dp[i-1][j][k]+dp[i-1][j-1][k-a[i]](j>=1)查看代码#include<bits/stdc++.h>#de......
  • SUMA&国产海光平台服务器32DB16主板ECC内存对应表&故障内存定位
    32DB16主板内存映射关系,在ECC报错后,可参考LinuxHWError及EDAC等OS信息,定位出错内存所在位置。一、关于主板型号如何确认?方法一:可以使用以下命令在Linux系统进行查看,sudodmidecode-tbaseboard也可以使用cat/sys/class/dmi/id/board_vendorcat/sys/class/dmi/id/bo......
  • C. Mad MAD Sum(cf960)
    题意:定义MAD为数组中至少出现两次的最大数字,如果没有就是0.给定一个长度为n的数组a,sum=0,下面的过程将依次循环执行,直到a中的所有数字都变成0:设置sum+=∑ai;设bi=MAD(a1,a2..ai),ai=bi求过程结束后sum的值。分析:经历操作一次后的数组是非递减的,以后每次都是将数组向右移动,为了......
  • SMU Summer 2024 Contest Round 6
    AManyFormulas思路:二进制枚举voidsolve(){strings;cin>>s;intn=s.size();intm=pow(2,n-1);intans=0;for(inti=0;i<m;++i){intnow=0,sum=0;for(intj=0;j<n;++j){......
  • AtCoder Beginner Contest 363
    AtCoderBeginnerContest363PilingUp模拟题。点击查看代码#include<bits/stdc++.h>usingnamespacestd;inta;signedmain(){cin>>a;if(a%100!=0){a%=100;cout<<100-a;}else{cout<<100;}retur......
  • 计算机网络中的检验和(checksum)(包括计算文件的检验和附有c++代码)
    介绍:检验和(checksum),在数据处理和数据通信领域中,用于校验目的地一组数据项的和。它通常是以十六进制为数制表示的形式。如果校验和的数值超过十六进制的FF,也就是255.就要求其补码作为校验和。通常用来在通信中,尤其是远距离通信中保证数据的完整性和准确性。(此引用了检验和的百......
  • Python学习计划——2.3常用内置函数(len, max, min, sum, etc.)
    Python提供了许多内置函数,用于简化对数据结构的操作。以下是一些常用的内置函数及其详细说明。1.len()len()函数用于返回对象(如列表、元组、字符串、字典等)的长度(元素个数)。示例:#列表fruits=["apple","banana","cherry"]print(len(fruits))#输出:3#元组c......