题面

Description

  有一张 n*m 的数表,其第i行第j列(1<=i<=n,1<=j<=m)的数值为能同时整除 i和j的所有自然数之和。

给定a,计算数表中不大于a的数之和。

Input

  输入包含多组数据。

  输入的第一行一个整数Q,表示测试点内的数据组数;

  接下来Q行,每行三个整数n,m,a(|a|<=10^9 )描述一组数据。

Output

  对每组数据,输出一行一个整数,表示答案模2^31的值。

Sample Input

2

4 4 3

10 10 5

Sample Output

20

148

Hint

题目分析

设\(h\)为预处理的约数之和,根据之前【BZOJ4407】于神之怒加强版的化简套路,我们可以得到
\[ \begin{split} ans&=\sum_{i=1}^n\sum_{j=1}^mh(\gcd(i,j))\\ &=\sum_{T=1}^n\lfloor\frac nT\rfloor\lfloor\frac mT\rfloor\sum_{d|T}\mu(\frac Td)h(d) \end{split} \]
按正常情况,我们应该把后面的\(\sum\limits_{d|T}\mu(\frac Td)h(d)\)预处理出前缀和形式。

然而,由于现在只有\(h(d)<a\)的部分才会产生贡献,所以我们可以将询问离线下来,按\(a\)排序,把不断更新的前缀和存在树状数组中即可。

代码实现

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<iomanip>
#include<cstdlib>
#include<queue>
#define MAXN 0x7fffffff
typedef long long LL;
const int N=100005;
const LL mod=1ll<<31;
using namespace std;
inline int Getint(){register int x=0,f=1;register char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}return x*f;}
int mu[N],prime[N];
int h[N],low[N];
bool vis[N];int ksm(int x,int k){int ret=1;while(k){if(k&1)ret=ret*x;x=x*x,k>>=1;}return ret;
}struct Que{int n,m,a,id;bool operator <(const Que &q)const{return a<q.a;}}s[N];#define mp(x,y) make_pair(x,y)
#define Pr pair<int,int>
priority_queue<Pr,vector<Pr>,greater<Pr> >q;#define lowbit(x) x&(-x)
int tr[N],ans[N];
void Add(int x,int val){for(int i=x;i<=1e5;i+=lowbit(i))tr[i]=(1ll*tr[i]+val)%mod;}
int Query(int x){LL ret=0;for(int i=x;i;i-=lowbit(i))ret=(ret+tr[i])%mod;return (ret+mod)%mod;}
int main(){mu[1]=h[1]=1;q.push(mp(1,1));for(int i=2;i<=1e5;i++){if(!vis[i])prime[++prime[0]]=i,mu[i]=-1,h[i]=1+i,low[i]=2;for(int j=1;j<=prime[0]&&1ll*i*prime[j]<=1e5;j++){vis[i*prime[j]]=1;if(i%prime[j]==0){low[i*prime[j]]=low[i]+1;h[i*prime[j]]=1ll*h[i]*(ksm(prime[j],low[i]+1)-1)/(ksm(prime[j],low[i])-1);break;}low[i*prime[j]]=2;h[i*prime[j]]=h[i]*h[prime[j]];mu[i*prime[j]]=-mu[i];}q.push(mp(h[i],i));}int Q=Getint();for(int i=1;i<=Q;i++)s[i].n=Getint(),s[i].m=Getint(),s[i].a=Getint(),s[i].id=i;sort(s+1,s+1+Q);for(int t=1;t<=Q;t++){int n=s[t].n,m=s[t].m;if(n>m)swap(n,m);while(!q.empty()&&q.top().first<=s[t].a){int x=q.top().first,i=q.top().second;q.pop();for(int j=i;j<=1e5;j+=i)Add(j,mu[j/i]*x);}for(int l=1,r,i=s[t].id;l<=n;l=r+1){r=min(n/(n/l),m/(m/l));ans[i]=(ans[i]+1ll*(n/l)*(m/l)%mod*(Query(r)-Query(l-1))%mod)%mod;}}for(int i=1;i<=Q;i++)cout<<(ans[i]+mod)%mod<<'\n';return 0;
}

转载于:https://www.cnblogs.com/Emiya-wjk/p/10008632.html

【SDOI2014】数表相关推荐

  1. (每日一题)P3312 [SDOI2014]数表(经典莫比乌斯反演 + 树状数组维护离线询问)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 每日一题(莫反 / 多项式 / 母函数 / 群论) 2021.4.11 莫反 P3312 [SDOI2 ...

  2. BZOJ 3529: [Sdoi2014]数表

    二次联通门 : BZOJ 3529: [Sdoi2014]数表 Latex的公式写起来略麻烦... 设$\LARGE F(x)=\sum_{d|x} \lfloor \dfrac xd \rfloor ...

  3. P3312 [SDOI2014]数表(离线 + 树状数组前缀和优化)

    P3312 [SDOI2014]数表 推式子 ∑i=1n∑j=1mσ(gcd(i,j))∑d=1nσ(d)∑i=1nd∑j=1md[gcd(i,,j)==1]∑d=1nσ(d)∑d=1ndμ(k)nk ...

  4. [BZOJ3529][Sdoi2014]数表

    [BZOJ3529][Sdoi2014]数表 试题描述 有一张N×m的数表,其第i行第j列(1 < =i < =n,1 < =j < =m)的数值为能同时整除i和j的所有自然数 ...

  5. BZOJ 3529: [Sdoi2014]数表 莫比乌斯

    3529: [Sdoi2014]数表 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 1879  Solved: 949 [Submit][Statu ...

  6. BZOJ3529: [Sdoi2014]数表(莫比乌斯反演,离线)

    Description 有一张 n×m 的数表,其第 i 行第 j 列(1 <= i <= n, 1 <= j <= m)的数值为 能同时整除 i 和 j 的所有自然数之和.给 ...

  7. 3529: [Sdoi2014]数表 - BZOJ

    Description 有一张N×m的数表,其第i行第j列(1 < =i < =n,1 < =j < =m)的数值为 能同时整除i和j的所有自然数之和.给定a,计算数表中不大于 ...

  8. BZOJ3529: [Sdoi2014]数表(莫比乌斯反演 树状数组)

    题意 题目链接 Sol 首先不考虑\(a\)的限制 我们要求的是 \[\sum_{i = 1}^n \sum_{j = 1}^m \sigma(gcd(i, j))\] 用常规的套路可以化到这个形式 ...

  9. bzoj3529: [Sdoi2014]数表

    %%%Po姐姐 https://wenku.baidu.com/view/fbec9c63ba1aa8114431d9ac.html [题意] 见原题 [题解] 一个数对(x,y)的公约数必定是其最大 ...

  10. 良心发现,时隔一年再回首莫比乌斯反演(公式性质证明+题目练习)

    文章目录 莫比乌斯反演 引入 公式 性质 模板 公式证明 莫比乌斯函数前缀和 题目练习 完全平方数 [HAOI2011]Problemb YY的GCD [SDOI2014]数表 [国家集训队]Cras ...

最新文章

  1. python函数图像加标签_tkinter(py3)更改图像标签,函数内部,实时
  2. 关于测试行业的零星思考
  3. css 浮动问题 display显示 和 光标设置cursor
  4. 各地新闻客户端名称_广西新闻网《“益”起脱贫》节目首播!县长做主播,一天卖出5万多斤圣女果...
  5. c# 插入树形数据#_C#数据类型能力问题 套装1
  6. zabbix mysql脚本_zabbix监控mysql脚本
  7. 支持 RISC-V 芯片的 Android 系统来了!
  8. CENTOS 7.0 安装discuz ,搭 mysql +php+apache 环境
  9. 鹰式价差matlab,鹰式期权:什么叫铁鹰式期权组合,蝶式价差期权?
  10. DY-SV17F运用集—语音IC
  11. 测绘——利用ExifTool提取照片exif信息【windows环境下】(信息非常全)
  12. 驾驶证学法减分助手小程序源码(带搭建视频教程)
  13. CAD制图软件中如何设置选择对象的显示效果?
  14. ubuntu如何安装Mac OS X主题
  15. android开发板出错,Kernel panic - not syncing: Attempted to kill the idle task!出错,求助!!!...
  16. 井字棋java代码_JAVA 井字棋
  17. 虚拟语气用法总结及真题解析
  18. 01-NumPy 数据库
  19. Adobe推出的反PS工具吓坏美颜党
  20. 2019 HIMCM美国高中生建模比赛 B题水瓶之战数模获奖论文(4篇完整版)

热门文章

  1. 【转】博客美化(5)为博客或系统添加一个强大的评论系统
  2. 20161212xlVBA文本文件多列合并
  3. Hibernate标准查询
  4. 四大组件 之 Broadcast Receiver
  5. Spring3.0_调试错误集
  6. m1系统怎么重装,m1芯片怎么重装系统,苹果M1芯片重装系统,m1芯片重新安装mac
  7. 夏天到啦!你的mac过热怎么办?教你几招过热技巧~
  8. Centos7 防火墙 ( firewalld ) 和 Selinux 一些简单操作命令
  9. OC 中property属性详解(assign , retain , copy , strong,weak,readonly , readwrite , atomic , nonatomic)
  10. 第二十一章:变换(十四)