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

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

数表

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

img

不妨设\(n<m\)

同时整除\(i,j\)的自然数之和就是\(gcd(i,j)\)的约数之和。我们设\(f(i)=\sum_{d|i}d\)

则:
\[ \displaystyle ans=\sum_{g=1}^{n}f(g)\sum_{i=1}^{\lfloor \frac{n}{g} \rfloor}\sum_{j=1}^{\lfloor \frac{m}{g} \rfloor}[gcd(i,j)=1]\\ =\sum_{g=1}^{n}f(g)\sum_{i=1}^{\lfloor \frac{n}{g} \rfloor}\sum_{j=1}^{\lfloor \frac{m}{g} \rfloor}\sum_{d|i,d|j}\mu(d) \]

又来套路一波:设\(T=gd\)\(\displaystyle ans=\sum_{T=1}^{n}\sum_{d|T}\mu(d)f(\frac{n}{d})\lfloor \frac{n}{T} \rfloor\lfloor \frac{m}{T} \rfloor\)

然后又了a的限制后,我们就将询问和\(f\)都离线下来排序,加入树状数组里面。

代码:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long#define N 100005#define int llusing namespace std;inline int Get() {int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}while('0'<=ch&&ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;}int Q;int pri[N];bool vis[N];ll sum[N];int mu[N];struct node { int id; ll sum; bool operator <(const node &a)const { return sum
m) swap(n,m); int last; ll ans=0; for(int i=1;i<=n;i=last+1) { last=min(n/(n/i),m/(m/i)); (ans+=1ll*(n/i)*(m/i)%mod*Ask(i,last)%mod)%=mod; } return ans;}signed main() { pre(100000); sort(st+1,st+1+cnt); Q=Get(); for(int i=1;i<=Q;i++) { q[i].n=Get(),q[i].m=Get(),q[i].a=Get(); q[i].id=i; } sort(q+1,q+1+Q); int tag=1; for(int i=1;i<=Q;i++) { while(tag<=cnt&&st[tag].sum<=q[i].a) { update(st[tag].id); tag++; } now=i; ans[q[i].id]=solve(q[i].n,q[i].m); } for(int i=1;i<=Q;i++) cout<
<<"\n"; return 0;}

转载于:https://www.cnblogs.com/hchhch233/p/9996438.html

你可能感兴趣的文章
Java多线程基础(一)——线程与锁
查看>>
Python每日一练0012
查看>>
研究人员用 AI 评估小血管病变,可预测病人患中风和痴呆的概率
查看>>
C++ 采集音频流(PCM裸流)实现录音功能
查看>>
Oracle Instant Client(即时客户端) 安装与配置
查看>>
windows环境下 生成git公钥和私钥
查看>>
ONVIF测试方法及工具
查看>>
JQuery实战---窗口效果
查看>>
最好用的Android黑客应用程序和工具
查看>>
矩阵的乘法算法
查看>>
跨服务器查询
查看>>
Android之SpannableString、SpannableStringBuilder总结
查看>>
自定义注解
查看>>
陌陌前端面试 - 凉面
查看>>
How to set up Conflux
查看>>
大数据时代,你的个人信息安全吗?
查看>>
我的友情链接
查看>>
javascript时间格式化
查看>>
Spring MVC基础
查看>>
JavaScript权威指南笔记
查看>>