博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3529: [Sdoi2014]数表
阅读量:4465 次
发布时间:2019-06-08

本文共 1885 字,大约阅读时间需要 6 分钟。

【传送门:】


简要题意:

  给出一张数表,数表上第i行第j列的格子上的数是所有同时整除i和j的自然数的和

  给出Q个询问,每个询问输入n,m,a,求出n*m的数表中格子上的数<=a的所有格子的和


题解:

  设F(x)为x的约数和,设n<m

  实际上就是求$\sum_{i=1}^{n}\sum_{j=1}^{m}F(gcd(i,j))[F(gcd(i,j))<=a]$

  我们先把$F(gcd(i,j))<=a$这个限制条件省略

  那么原始就等于$\sum_{i=1}^{n}\sum_{j=1}^{m}F(gcd(i,j))$

  先枚举d=gcd(i,j),得到$$\sum_{d=1}^{n}F(d)*\sum_{i=1}^{\frac{n}{d}}\sum_{j=1}{\frac{m}{d}}[gcd(i,j)==1]$$

  设G(x)为gcd(i,j)%x==0的数对数,f(x)为gcd(i,j)==x的数对数,显然$G(n)=\sum_{n|d}f(d)$,根据反演公式得到$f(n)=\sum_{n|d}\mu(\frac{d}{n})G(d)$

  因为$G(x)=\frac{n}{x}*\frac{m}{x}$,所以原式等于$$\sum_{d=1}^{n}F(d)*\sum_{d|i}\mu(\frac{i}{d})*\frac{n}{i}*\frac{m}{i}$$

  先枚举i,得到$$\sum_{i=1}^{n}\frac{n}{i}*\frac{m}{i}*\sum_{d|i}F(d)*\mu(\frac{i}{d})$$

  然后呢,再加入限制条件,因为实际上只有当F(i)<=a时,i才能取,那么我们先预处理F,然后让F的值从小到大排序,将询问按照a的值从小到大排序

  设$D(d)=\sum_{i|d}F(i)*\mu(\frac{d}{i})$,对于一个新进来的i,如果F(i)<=a,则将所有i|d的D(d)全部加上$F(i)*\mu(\frac{d}{i})$,可以用树状数组维护前缀和就行了

  PS:不要用long long,不要%,%太慢了会超时,直接溢出,然后将答案&0x7fffffff


参考代码:

#include
#include
#include
#include
#include
using namespace std;int miu[110000],prime[110000],v[110000];struct F{ int t,d;}f[110000];bool cmpf(F n1,F n2){
return n1.d
v[i]||prime[j]>n/i) break; v[i*prime[j]]=prime[j]; if(i%prime[j]==0) miu[i*prime[j]]=0; else miu[i*prime[j]]=-miu[i]; } } for(int i=1;i<=n;i++) { f[i].t=i; for(int j=i;j<=n;j+=i) f[j].d+=i; }}struct query{ int n,m,a,id;}q[21000];bool cmp(query n1,query n2){ return n1.a
q[i].m) swap(q[i].n,q[i].m); mn=max(q[i].n,mn); } sort(q+1,q+Q+1,cmp);sort(f+1,f+mn+1,cmpf); memset(a,0,sizeof(a)); for(int i=1,j=0;i<=Q;i++) { while(j+1<=mn&&f[j+1].d<=q[i].a) { j++; for(int k=f[j].t;k<=mn;k+=f[j].t) change(k,f[j].d*miu[k/f[j].t]); } getd(i); } for(int i=1;i<=Q;i++) printf("%d\n",ans[i]&0x7fffffff); return 0;}

 

转载于:https://www.cnblogs.com/Never-mind/p/9850890.html

你可能感兴趣的文章
(2)数据结构——线性表(链表)实现
查看>>
[leetCode]Linked List Cycle I+II
查看>>
leetcode中的python学习
查看>>
sqlserver打开对象资源管理器管理的帮助文档的快捷键
查看>>
JBOSSAS 5.x/6.x 反序列化命令执行漏洞(CVE-2017-12149)
查看>>
Zookeeper zkui-zookeeper图形化管理工具
查看>>
java运行时内存分类
查看>>
为什么说 Git 比 SVN 更好
查看>>
1.基础数据类型的初识 字符串 bool 整型 if else elif
查看>>
【设计模式】4、原型模式
查看>>
进入meta模式关闭背光灯
查看>>
webstorm上svn的安装使用
查看>>
【JEECG技术文档】数据权限自定义SQL表达式用法说明
查看>>
使用 Bootstrap Typeahead 组件
查看>>
linux_cacti 配置之 安装snmp 服务
查看>>
201407-至今
查看>>
c# 应用事务
查看>>
优化杭州某著名电子商务网站高并发千万级大型数据库经验之- SQL语句优化(转)...
查看>>
WPF——TargetNullValue(如何在绑定空值显示默认字符)
查看>>
Linux之crontab
查看>>