bzoj3529 [Sdoi2014]数表(莫比乌斯反演+树状数组)
来源:互联网 发布:知乎回答如何取消匿名 编辑:程序博客网 时间:2024/06/05 00:23
%%%popoqqq大爷的题解:传送门
又掌握了线性素数筛处理sigma函数的技能。。。复杂度O(T*logT+T*sqrt(n)*logn)
#include <bits/stdc++.h>#define ll long long#define inf 0x7fffffff#define pa pair<int,int>#define N 100000using namespace std;inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f;}int tst,mu[N+10],prime[N],tot=0,mnfac[N],c[N+10],ans[N+10];pa f[N+10];bool notprime[N+10];struct que{ int l,r,a,id;}q[20010];bool cmp(que x,que y){ return x.a<y.a;}void Mobius(){ notprime[1]=1;mu[1]=1;f[1].first=1;f[1].second=1; for(int i=2;i<=N;++i){ f[i].second=i; if(!notprime[i]){ prime[++tot]=i;mu[i]=-1;f[i].first=i+1;mnfac[i]=i; }for(int j=1;prime[j]*i<=N;++j){ notprime[prime[j]*i]=1; if(i%prime[j]==0){ mu[prime[j]*i]=0;mnfac[prime[j]*i]=mnfac[i]*prime[j]; if(mnfac[prime[j]*i]==prime[j]*i) f[prime[j]*i].first=f[i].first+prime[j]*i; else f[prime[j]*i].first=f[i].first/f[mnfac[i]].first*f[mnfac[prime[j]*i]].first;break; }mu[prime[j]*i]=-mu[i];mnfac[prime[j]*i]=prime[j]; f[prime[j]*i].first=f[i].first*f[prime[j]].first; } }for(int i=1;i<=N;++i) mu[i]+=mu[i-1];}void add(int x,int val){ for(;x<=N;x+=x&(-x)) c[x]+=val;}int ask(int x){ int res=0; for(;x>0;x-=x&(-x)) res+=c[x];return res;}int solve(int n,int m){ int last,res=0;if(n>m) swap(n,m); for(int i=1;i<=n;i=last+1){ last=min(n/(n/i),m/(m/i)); res+=(n/i)*(m/i)*(ask(last)-ask(i-1)); }return res&inf;}int main(){// freopen("a.in","r",stdin); tst=read();Mobius();sort(f+1,f+N+1); for(int i=1;i<=tst;++i){ q[i].l=read();q[i].r=read();q[i].a=read();q[i].id=i; }sort(q+1,q+tst+1,cmp); for(int i=1,j=1;i<=tst;++i){ while(j<=N&&f[j].first<=q[i].a){ for(int k=1;k*f[j].second<=N;++k) add(k*f[j].second,f[j].first*(mu[k]-mu[k-1]));j++; } ans[q[i].id]=solve(q[i].l,q[i].r); } for(int i=1;i<=tst;++i) printf("%d\n",ans[i]); return 0;}
阅读全文
0 0
- [BZOJ3529][Sdoi2014]数表 && 莫比乌斯反演+树状数组
- [BZOJ3529]SDOI2014数表|莫比乌斯反演|树状数组
- 【bzoj3529】【SDOI2014】【数表】【莫比乌斯反演+树状数组】
- [BZOJ3529] [SDOI2014] 数表 - 莫比乌斯反演 - 树状数组
- bzoj3529 [Sdoi2014]数表(莫比乌斯反演+树状数组)
- 【bzoj3529】[Sdoi2014]数表 线性筛法+树状数组+莫比乌斯反演+数论分块
- [BZOJ3529][Sdoi2014]数表(莫比乌斯反演+树状数组)
- [BZOJ3529][SDOI2014]数表(莫比乌斯反演+树状数组)
- BZOJ3529 [Sdoi2014]数表 【莫比乌斯反演】
- 3529: [Sdoi2014]数表 莫比乌斯反演+树状数组
- 3529: [Sdoi2014]数表|莫比乌斯反演|树状数组
- [莫比乌斯反演+数状数组] BZOJ3529: [Sdoi2014]数表
- 【BZOJ3529】数表(莫比乌斯反演)(树状数组)(数学)
- 【莫比乌斯反演】[BZOJ3529]数表
- 【BZOJ】】【P3529】【Sdoi2014】【数表】【题解】【莫比乌斯反演+离线+树状数组】
- BZOJ 3529 SDOI2014 数表 莫比乌斯反演+树状数组
- bzoj 3529: [Sdoi2014]数表 莫比乌斯反演&树状数组
- [莫比乌斯反演 树状数组] BZOJ 3529 [Sdoi2014]数表
- Python学习之路---Python 循环语句
- 微信小程序框架wxss(一)wxss概述
- 1 记滴滴实习面试记录
- 沉浸式状态栏 设置状态栏颜色
- BZOJ 2427: [HAOI2010]软件安装 Tarjan缩点 + DP
- bzoj3529 [Sdoi2014]数表(莫比乌斯反演+树状数组)
- OneNote笔记保存到CSDN博客
- IO流一些基本内容(日后补充)
- Java Activiti(10)--与spring整合配置文件activiti-context.xml
- ServletContext的5大作用
- git命令-切换分支
- Data migration to generate the maximum value of the sequence between beta scheme and appbeta scheme
- Qt 5 小细节
- 文章标题