为啥不能用整除分块
  • 板块P3601 签到题
  • 楼主DengDuck鄧德
  • 当前回复12
  • 已保存回复12
  • 发布时间2023/4/20 17:35
  • 上次更新2023/10/23 17:59:09
查看原帖
为啥不能用整除分块
501947
DengDuck鄧德楼主2023/4/20 17:35

rt,我想了想。

∑i=lr(x−ϕ(x))\sum_{i=l}^r (x-\phi(x))

首先考虑前缀和作差,我们所求的转换为一个标准的问题:

∑i=1n(x−ϕ(x))\sum_{i=1}^n (x-\phi(x))

先别急着拆开!不然这就是一个典型的莫比乌斯反演问题,或者杜教筛之类的,但是时间复杂度无法通过这题,这题数据是l,r≤1012l,r\leq 10^{12}。

考虑每个元素对答案的贡献,显然为:

∑i=1n(⌊ni⌋−1)\sum_{i=1}^n(\lfloor \frac n i\rfloor-1)
#include<bits/stdc++.h>
#define LL long long
using namespace std;
const LL mod=666623333;
LL L,R;
LL sum(LL x)
{
	LL ans=0; 
	for(LL l=1,r;l<=x;l=r+1)
	{
		r=x/(x/l);		
		ans=(ans+(x/l)*(r-l+1)%mod)%mod;
	}
	return ans;
}
int main()
{
	scanf("%lld%lld",&L,&R);
	printf("%lld",(sum(R)-sum(L-1)+mod-R+L-1)%mod);
} 

手搓的样例过了,但是样例没过,有人来点醒我哪里有问题吗

2023/4/20 17:35
加载中...