提交时间:2023-12-22 13:28:20
运行 ID: 117129
#include<bits/stdc++.h> using namespace std; int t,l,r,cnt; long long tr[200005],ans[200005]; vector<int>fac[200005]; struct query{ int l,r,id; }q[100005]; bool cmp(query a,query b){ return a.r<b.r; } struct node{ int x,y; long long v; }a[2272118]; void add(int x,long long k){ for(;x<=200000;x+=(x&-x))tr[x]+=k; } int query(int x,long long ans=0){ for(;x;x-=(x&-x))ans+=tr[x]; return ans; } int main(){ for(int i=1;i<=200000;i++)for(int j=2*i;j<=200000;j+=i)fac[j].push_back(i); for(int i=1;i<=200000;i++)for(int j=0;j<fac[i].size();j++)a[++cnt]=(node){fac[i][j],i,fac[i].size()-j-1}; cin>>t; for(int i=1;i<=t;i++)cin>>q[i].l>>q[i].r,q[i].id=i,ans[i]=1ll*(q[i].r-q[i].l+1)*(q[i].r-q[i].l)*(q[i].r-q[i].l-1)/6-max(0,q[i].r/6-(q[i].l-1)/3)-max(0,q[i].r/15-(q[i].l-1)/6); sort(q+1,q+t+1,cmp); for(int i=1,j=1;i<=t;i++){ while(j<=cnt&&a[j].y<=q[i].r)add(a[j].x,a[j].v),j++; ans[q[i].id]-=query(q[i].r)-query(q[i].l-1); } for(int i=1;i<=t;i++)cout<<ans[i]<<'\n'; return 0; }