数学板块学习之整除分块

整除分块

题什么的看here

学莫比乌斯反演总看见整除分块,所以!。。先来学一下整除分块
直接通过给出问题看

∑ i = 1 n [ n i ] , n ≤ 1 0 12 \sum_{i=1}^{n}{[\cfrac{n}{i}]},n\leq10^{12} i=1n[in],n1012

首先来说暴力肯定跑不了
然后发现对于 [ n i ] [\cfrac{n}{i}] [in]最多只有 2 n 2\sqrt{n} 2n 个值
并且如果 [ n i ′ ] = [ n i ] [\cfrac{n}{i'}]=[\cfrac{n}{i}] [in]=[in] i ′ i' i的最大值为 [ n [ n i ] ] [\cfrac{n}{[\frac{n}{i}]}] [[in]n]
用法就是设 L = 1 L = 1 L=1,令 R = [ n [ n L ] ] R = [\cfrac{n}{[\frac{n}{L}]}] R=[[Ln]n]。将 ( R − L + 1 ) ∗ [ n L ] (R - L + 1)*[\cfrac{n}{L}] (RL+1)[Ln]累加,再令 L = R + 1 L = R + 1 L=R+1

代码如下

for(int l = 1,r;l <= n; l = r+1) {
	r = (n/(n/l));
	ans += (r-l+1)*(n/l);
}

小技巧:

分块 [ n i ] [\cfrac{n}{i}] [in] r = [ n [ n l ] ] 即 r = ( n / ( n / l ) ) r = [\cfrac{n}{[\frac{n}{l}]}]即r=(n/(n/l)) r=[[ln]n]r=(n/(n/l))
分块 [ n i 2 ] [\cfrac{n}{i^{2}}] [i2n] r = [ [ n n l 2 ]   ] , 即 r = s q r t ( n / ( n / l / l ) ) r=\big[\sqrt{[\cfrac{n}{\frac{n}{l^{2}}}]}\ \big],即r=sqrt(n/(n/l/l)) r=[[l2nn]  ],r=sqrt(n/(n/l/l))
分块 ⌊   ⌊ n i ⌋   ⌋ \lfloor\ \sqrt{\lfloor\cfrac{n}{i}\rfloor}\ \rfloor  in   r = ⌊ n ( ⌊ ⌊ n i ⌋ ⌋ ) 2 ⌋ 即 r = n / ( s q r t ( n / l ) ∗ s q r t ( n / l ) ) r=\lfloor\cfrac{n}{(\lfloor\sqrt{\lfloor\frac{n}{i}\rfloor}\rfloor)^2}\rfloor即r=n/(sqrt(n/l)*sqrt(n/l)) r=(in )2nr=n/(sqrt(n/l)sqrt(n/l))
证明直接上图,用正在学的latex写数学公式好爽,但是好慢。。。字丑了点(何止一点)QAQ敲代码敲得都不会写字了
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值