[51nod1742]

[51nod1742]开心的小Q 数论分块

Solution

#include<bits/stdc++.h>
#define rep(i,a,b) for(ll i=(a);i<=(b);i++)
#define ll long long
using namespace std;
const ll N=1e5;
ll v[N],cnt,l,r;
ll sum(ll x,ll n){
	ll last=1,r;
	ll ans=0;
	n/=x;
	for(;last<=n;last=r+1){
		r=n/(n/last);
		ans+=1LL*(r-last+1)*(n/last);
	}return ans;
}
ll work(ll n){
	ll ans=0;
	rep(i,2,sqrt(n))v[i]=1;
	rep(i,2,sqrt(n)){
		if(v[i]==0)continue;
		ans+=v[i]*sum(i*i,n);
		for(ll j=i*2;j<=sqrt(n);j+=i){
			v[j]-=v[i];
		}
	}
	return ans;
}
int main()
{
	scanf("%lld%lld",&l,&r);
	cout<<work(r)-work(l-1);
	return 0;
}

 

相关文章:

  • 2021-06-20
  • 2021-07-31
  • 2022-12-23
  • 2022-02-17
  • 2022-03-02
  • 2021-09-28
  • 2022-02-10
  • 2021-10-25
猜你喜欢
  • 2021-07-25
  • 2021-11-11
  • 2022-12-23
  • 2021-09-20
  • 2021-11-05
  • 2021-05-26
相关资源
相似解决方案