数论练习:求2^w(i)的前n项和,其中w(i)表示i里面不同质因子个数

题意:

∑ i = 1 n 2 w ( i ) , 其 中 w ( i ) 表 示 i 里 面 不 同 质 因 子 个 数 \sum_{i=1}^{n} 2^{w(i)},其中w(i)表示i里面不同质因子个数 i=1n2w(i),w(i)i

解法:

先 考 虑 将 2 w ( i ) 变 成 看 得 懂 的 式 子 : 可 以 将 2 w ( i ) 转 化 为 : 将 w ( i ) 个 质 因 子 放 到 这 两 个 集 合 里 , 每 个 质 因 子 有 两 种 放 法 , 因 此 是 2 w ( i ) , ∑ i ∗ j = n , ( i , j ) = 1 1 就 是 所 有 可 能 的 放 置 方 案 数 . 因 此 : 2 w ( i ) = ∑ i ∗ j = n , ( i , j ) = 1 1 那 么 : ∑ i = 1 n 2 w ( i ) = ∑ k = 1 n ∑ i ∗ j = k , ( i , j ) = 1 1 = ∑ i ∗ j < = n , ( i , j ) = 1 1 = ∑ i ∗ j < = n [ ( i , j ) = = 1 ] = ∑ i ∗ j < = n e ( ( i , j ) ) 由 莫 比 乌 斯 函 数 性 质 : e ( n ) = ∑ d ∣ n μ ( d ) 那 么 式 子 可 以 变 为 : ∑ i ∗ j < = n ∑ d ∣ ( i , j ) μ ( d ) = ∑ i ∗ j < = n ∑ d ∣ i , d ∣ j μ ( d ) 改 变 枚 举 顺 序 , 式 子 可 以 变 为 : ∑ d = 1 n μ ( d ) ∑ i ∗ j < = n , d ∣ i , d ∣ j 1 右 边 i 和 j 都 是 d 的 倍 数 , 将 i ∗ j < = n 左 右 两 边 约 去 d , 那 么 式 子 可 以 变 为 : = ∑ d = 1 n μ ( d ) ∑ i ∗ j < = n / d 2 1 观 察 到 d 的 取 值 > n 时 , n d 2 = 0 , 因 此 d 只 需 要 枚 举 到 n 即 可 , 那 么 式 子 变 为 : ∑ d = 1 n μ ( d ) ∑ i ∗ j < = n d 2 1 右 边 ∑ i ∗ j < = n d 2 1 , 令 f ( x ) = ∑ i ∗ j < = x 1 , 这 是 可 以 预 处 理 的 , 那 么 式 子 可 以 变 为 : ∑ d = 1 n μ ( d ) f ( n d 2 ) , 这 里 已 经 可 以 单 组 询 问 O ( n ) , 不 预 处 理 的 做 法 ( n 比 较 大 的 时 候 f ( n d 2 ) 就 不 能 预 处 理 了 ) : ∑ d = 1 n μ ( d ) ∑ i ∗ j < = n d 2 1 的 右 边 ∑ i ∗ j < = n d 2 1 = ∑ i = 1 n d 2 ⌊ n d 2 i ⌋ 这 部 分 可 以 用 数 论 分 块 O ( n d 2 ) 计 算 . 好 像 还 能 优 化 , 但 是 我 太 菜 了 整 不 动 了 . . . 先考虑将2^{w(i)}变成看得懂的式子:\\ 可以将2^{w(i)}转化为:\\ 将w(i)个质因子放到这两个集合里,\\ 每个质因子有两种放法,因此是2^{w(i)},\\ \sum_{i*j=n,(i,j)=1}1 就是所有可能的放置方案数.\\ 因此:2^{w(i)}=\sum_{i*j=n,(i,j)=1}1\\ 那么:\sum_{i=1}^{n} 2^{w(i)}\\ =\sum_{k=1}^{n} \sum_{i*j=k,(i,j)=1}1\\ =\sum_{i*j<=n,(i,j)=1}1\\ =\sum_{i*j<=n}[(i,j)==1]\\ =\sum_{i*j<=n}e((i,j))\\ 由莫比乌斯函数性质:e(n)=\sum_{d|n}\mu(d)\\ 那么式子可以变为:\sum_{i*j<=n} \sum_{d|(i,j)}\mu(d)\\ =\sum_{i*j<=n}\sum_{d|i,d|j}\mu(d)\\ 改变枚举顺序,式子可以变为:\\ \sum_{d=1}^{n}\mu(d) \sum_{i*j<=n,d|i,d|j}1\\ 右边i和j都是d的倍数,将i*j<=n左右两边约去d,那么式子可以变为:\\ =\sum_{d=1}^{n}\mu(d) \sum_{i*j<=n/d^2}1\\ 观察到d的取值>\sqrt{n}时,\frac{n}{d^{2}}=0,\\ 因此d只需要枚举到\sqrt{n}即可,\\ 那么式子变为:\sum_{d=1}^{\sqrt{n}}\mu(d) \sum_{i*j<=\frac{n}{d^{2}}}1\\ 右边\sum_{i*j<=\frac{n}{d^{2}}}1,令f(x)=\sum_{i*j<=x}1,这是可以预处理的,\\ 那么式子可以变为:\sum_{d=1}^{\sqrt{n}}\mu(d)f(\frac{n}{d^2}),这里已经可以单组询问O(\sqrt{n}),\\ 不预处理的做法(n比较大的时候f(\frac{n}{d^2})就不能预处理了):\\ \sum_{d=1}^{\sqrt{n}}\mu(d) \sum_{i*j<=\frac{n}{d^{2}}}1的右边\sum_{i*j<=\frac{n}{d^{2}}}1=\sum_{i=1}^{\frac{n}{d^2}}\lfloor \frac{\frac{n}{d^2}}{i}\rfloor\\ 这部分可以用数论分块O(\sqrt{\frac{n}{d^2}})计算.\\ 好像还能优化,但是我太菜了整不动了... 2w(i):2w(i):w(i),,2w(i),ij=n,(i,j)=11.2w(i)=ij=n,(i,j)=11:i=1n2w(i)=k=1nij=k,(i,j)=11=ij<=n,(i,j)=11=ij<=n[(i,j)==1]=ij<=ne((i,j)):e(n)=dnμ(d):ij<=nd(i,j)μ(d)=ij<=ndi,djμ(d),:d=1nμ(d)ij<=n,di,dj1ijd,ij<=nd,:=d=1nμ(d)ij<=n/d21d>n ,d2n=0,dn ,:d=1n μ(d)ij<=d2n1ij<=d2n1,f(x)=ij<=x1,,:d=1n μ(d)f(d2n),O(n ),(nf(d2n)):d=1n μ(d)ij<=d2n1ij<=d2n1=i=1d2nid2nO(d2n ).,...


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值