Description

有一张N×m的数表,其第i行第j列(1 < =i < =礼。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

1 < =N.m < =10^5 。 1 < =Q < =2×10^4

Source

Round 1 Day 1

在反演上的处理和DzyLovesMath1是相似的属于同一类题目

问题在于询问有10^4个所以要BIT维护一下前缀和

推公式过程懒得放了…贴个Po姐课件的图吧





(从未见过如此丧病的反演..反演还要加数据结构T_T

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define MAXN 100010
#define lowbit(x) (x&(-x))
#define LL long long
#define MAXINT (0x7fffffff)
#define GET (ch>='0'&&ch<='9')
using namespace std;
int T,maxn;
int c[MAXN];
bool not_prime[MAXN];
int prime[MAXN],mu[MAXN]={0,1},top;
int ans[MAXN];
struct Query
{
int n,m,a,id;
bool operator <(const Query& t)const {return a<t.a;}
}q[MAXN];
struct num
{
int a,b;
bool operator <(const num& x)const {return a==x.a?b<x.b:a<x.a;}
}f[MAXN];
void init()
{
for (int i=2;i<=maxn;i++)
{
if (!not_prime[i]) prime[++top]=i,mu[i]=-1;
for (int j=1;j<=top&&i*prime[j]<=maxn;j++)
{
not_prime[i*prime[j]]=1;mu[i*prime[j]]=-mu[i];
if (i%prime[j]==0) {mu[i*prime[j]]=0;break;}
}
}
for (int i=1;i<=maxn;i++)
{
for (int j=i;j<=maxn;j+=i) f[j].a+=i;
f[i].b=i;
}
}
void add(int x,int delta) {for (int i=x;i<=maxn;i+=lowbit(i)) c[i]+=delta;}
int query(int x)
{
int ret=0;
for (int i=x;i;i-=lowbit(i)) ret+=c[i];
return ret;
}
void in(int &x)
{
char ch=getchar();x=0;int flag=1;
while (!GET) flag=(ch=='-')? -1:1,ch=getchar();
while (GET) x=x*10+ch-'0',ch=getchar();x*=flag;
}
void calc(int x)
{
int id=q[x].id,n=q[x].n,m=q[x].m,last=0,t=min(n,m);
for (int i=1;i<=t;i=last+1)
{
last=min(n/(n/i),m/(m/i));
ans[id]+=(n/i)*(m/i)*(query(last)-query(i-1));
}
}
int main()
{
in(T);int now=0;
for (int i=1;i<=T;i++) in(q[i].n),in(q[i].m),in(q[i].a),q[i].id=i,maxn=max(maxn,max(q[i].n,q[i].m));
init();sort(q+1,q+T+1);sort(f+1,f+maxn+1);
for (int i=1;i<=T;i++)
{
while (now+1<=maxn&&f[now+1].a<=q[i].a)
{
now++;
for (int j=f[now].b;j<=maxn;j+=f[now].b) add(j,f[now].a*mu[j/f[now].b]);
}
calc(i);
}
for (int i=1;i<=T;i++) printf("%d\n",ans[i]&MAXINT);
}

【SDOI2014】【BZOJ3529】数表的更多相关文章

  1. 【BZOJ3529】【SDOI2014】 数表

    Time Limit: 10 Sec Memory Limit: 512 MB Description ​ 有一张\(n×m\)的数表,其第i行第j列(\(,1 \le i \leq n,1 \le ...

  2. 【BZOJ3529】【SDOI2014】数表

    Time Limit: 1000 ms Memory Limit: 512 MB Description 有一张n×m的数表,其第i行第j列 (1≤i≤n,1≤j≤m)的数值为能同时整除i和j的所有自 ...

  3. 【BZOJ3529】【SDOI2014】数表 (莫比乌斯反演+树状数组)

    传送门 Description 有一张$n\times m$的数表,其第$i$行第$j$列 $(1≤i≤n,1≤j≤m)$ 的数值为能同时整除$i$和$j$的所有自然数之和.现在给定$a$,计算数表中 ...

  4. BZOJ 3529 【SDOI2014】 数表

    题目链接:数表 我们一起来膜PoPoQQQ大爷的题解吧Orz 首先我们来考虑没有\(a\)的限制该怎么做.显然交换\(n\),\(m\)答案不变,所以后面默认\(n \le m\). 我们定义两个函数 ...

  5. 【SDOI2014】数表

    题面 题解 不管$a$的限制 我们要求的东西是:($\sigma(x)$是$x$的约数个数和) $ \sum_{i=1}^n\sum_{j=1}^m\sigma(gcd(i,j)) $ 设$f(x)= ...

  6. [BZOJ3529]数表

    假设$n\leq m$,我们先不考虑$\leq a$的限制 $\sum\limits_{i=1}^n\sum\limits_{j=1}^m\sigma((i,j))=\sum\limits_{T=1} ...

  7. 【JZOJ3623】【SDOI2014】数表(table) 树状数组+离线+莫比乌斯反演

    题面 100 \[ Ans=\sum_{i=1}^n\sum_{j=1}^mg(gcd(i,j)) \] 其中, \[ g(d)=\sum_{i|d}i \] 我们注意到\(gcd(i,j)\)最多有 ...

  8. 【BZOJ3529】[Sdoi2014]数表 莫比乌斯反演+树状数组

    [BZOJ3529][Sdoi2014]数表 Description 有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为能同时整除i和 ...

  9. [bzoj3529][Sdoi2014]数表_树状数组_莫比乌斯反演

    数表 bzoj-3529 Sdoi-2014 题目大意:n*m的数表,第i行第j列的数是同时整除i和j的所有自然数之和.给定a,求数表中所有不超过a的和. 注释:$1\le n,m \le 10^5$ ...

  10. BZOJ3529 [Sdoi2014]数表 【莫比乌斯反演】

    3529: [Sdoi2014]数表 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2151 Solved: 1080 [Submit][Status ...

随机推荐

  1. C# WPF 滚动字幕实现

    <Window x:Class="Micro.Crawler.MainWindow" xmlns="http://schemas.microsoft.com/win ...

  2. eclipse 运行简单JAVA程序事例

    开发JAVA已经有一段时间了,不过要运行JAVA程序,还是在命令行敲命令,很不方便,很麻烦,突然想到eclipse应该也有这个功能,于是百度了一下,将步骤晒出来,供大家参考. 1.创建JAVA工程 单 ...

  3. Iterator接口用法

    1.所有实现Collection接口的容器类都有一个iteractor方法,用于返回一个实现了Iteractor接口的对象, 2.Iteractor对象成为迭代器,用以实现对容器内元素的遍历操作 3. ...

  4. 行内元素有哪些?块级元素有哪些? 空(void)元素有那些?

    行内元素:a.b.span.img.input.strong.select.label.em.button.textarea块级元素:div.ul.li.dl.dt.dd.p.h1-h6.blockq ...

  5. JavaWeb应用项目中文乱码的解决

     转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6383542.html 在把web项目成功部署到云主机后,通过浏览器成功地访问到了你的网站,却发现页面里本该由 ...

  6. Knockout学习之表单绑定器(上)

    表单绑定器 “click”绑定 Click 绑定器可以将javascript函数绑定到指定的dom元素,并且再该元素被点击时将触发绑定的函数,大多数情况下都会使用button.input和a元素,当然 ...

  7. 由一次 symbol lookup error 引发的思考

    开发一个跨平台的项目的时候,大部分时候都是在VS下进行编码,所以也就使用了VS的解决方案来管理项目. 因为要跨平台,当时网上看scons这个工具不错,所以在linux下就使用了scons来作为编译脚本 ...

  8. Jenkins卸载方法(Windows/Linux/MacOS)

    注意: 命令行运行的war包或者安装包,都会在命令行上提示了配置文件文件夹.jenkins,卸载时,注意一定要把这些一起删除. 比如Windows下用war包部署的命令行信息如下: 查看原图   如上 ...

  9. Inno Setup入门(八)——有选择性的安装文件

    这主要使用[Components]段实现,一个演示的代码如下: [setup] ;全局设置,本段必须 AppName=Test AppVerName=TEST DefaultDirName=" ...

  10. 如何解决input file 选取相同文件后,change事件不起作用解决方法

    两种方法 1.在你的input所属的form表单reset()就可以了! $("#avatorForm")[0].reset(); 2.设置你的input file value值为 ...