整除分块

首先我们先引入一个问题:

∑ i − 1 n n i \sum{^n_{i-1} \frac{n}{i}} i1nin
1-n内有 意思就是说i是从1到n中所有n/i(整除)的和,我们那25为例

然后对于这个式子,n<=1e7我们还可以尝试暴力暴力,但是n到了更大的数比如1e12这样我们显然不能暴力了。那么我们就引入整除分块,他 整除分块对我们后面的莫比乌斯反演有很大的帮助
在这里插入图片描述
然后我们就看下取整这一行,找这一行的规律,从前往后并不好看出什么规律,最好是从后往前看,因为我们已经把相同下取整结果归为一组,
在这里插入图片描述
然后我们看20其实就是最后一组的右端点,10是结果为第7组的右端点,10其实是n/2,而11就是n/2+1,这样我们往前推一个就是6=n/3,第7组的左端点是7=n/3+1…这样我们一步步的往前推。
而每组的结果就是 n n n / / / 这一组的右端点,而每组下取整结果个数就是 右 端 点 − 左 端 点 右端点-左端点 所以这一组对结果产生的代价就是 ( 右 端 点 − 左 端 点 ) ∗ ( n / 右 端 点 ) (右端点-左端点)*(n/右端点) ()(n/)
接下来细致的看下下图,再分析一遍

在这里插入图片描述
先说一下他最大有 2 ∗ n 2*\sqrt n 2n 组,之所以最大有这么多组就是因为前 n \sqrt n n , ( i < = n ) (i<=\sqrt n) i<=n 个, n / i n/i n/i最多有 n \sqrt n n 个,大于 n \sqrt n n 的时候,他的另一个乘数一定小于 n \sqrt n n 因为 一个大于 n \sqrt n n 的数要是在乘以另一个大于 n \sqrt n n 的数那么他肯定大于 n \sqrt n n

for(int l=1,r;l<=n;l=r+1){
	r=n/(n/l);
	sum+=(r-l+1)*(n/l);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值