Description

  1. 有一张N×m的数表,其第i行第j列(1 < =i < =礼。1 < =j < =m)的数值为

能同一时候整除i和j的全部自然数之和。给定a,计算数表中不大于a的数之和。

Input

  1. 输入包括多组数据。
  2. 输入的第一行一个整数Q表示測试点内的数据组数,接下来Q行,每行三个整数nma(|a| < =10^9)描写叙述一组数据。

Output

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

Sample Input

  1. 2
  2. 4 4 3
  3. 10 10 5

Sample Output

  1. 20
  2. 148

HINT

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

Source

Round 1 Day 1

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

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

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





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

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cmath>
  5. #include<algorithm>
  6. #define MAXN 100010
  7. #define lowbit(x) (x&(-x))
  8. #define LL long long
  9. #define MAXINT (0x7fffffff)
  10. #define GET (ch>='0'&&ch<='9')
  11. using namespace std;
  12. int T,maxn;
  13. int c[MAXN];
  14. bool not_prime[MAXN];
  15. int prime[MAXN],mu[MAXN]={0,1},top;
  16. int ans[MAXN];
  17. struct Query
  18. {
  19. int n,m,a,id;
  20. bool operator <(const Query& t)const {return a<t.a;}
  21. }q[MAXN];
  22. struct num
  23. {
  24. int a,b;
  25. bool operator <(const num& x)const {return a==x.a?b<x.b:a<x.a;}
  26. }f[MAXN];
  27. void init()
  28. {
  29. for (int i=2;i<=maxn;i++)
  30. {
  31. if (!not_prime[i]) prime[++top]=i,mu[i]=-1;
  32. for (int j=1;j<=top&&i*prime[j]<=maxn;j++)
  33. {
  34. not_prime[i*prime[j]]=1;mu[i*prime[j]]=-mu[i];
  35. if (i%prime[j]==0) {mu[i*prime[j]]=0;break;}
  36. }
  37. }
  38. for (int i=1;i<=maxn;i++)
  39. {
  40. for (int j=i;j<=maxn;j+=i) f[j].a+=i;
  41. f[i].b=i;
  42. }
  43. }
  44. void add(int x,int delta) {for (int i=x;i<=maxn;i+=lowbit(i)) c[i]+=delta;}
  45. int query(int x)
  46. {
  47. int ret=0;
  48. for (int i=x;i;i-=lowbit(i)) ret+=c[i];
  49. return ret;
  50. }
  51. void in(int &x)
  52. {
  53. char ch=getchar();x=0;int flag=1;
  54. while (!GET) flag=(ch=='-')?
  55. -1:1,ch=getchar();
  56. while (GET) x=x*10+ch-'0',ch=getchar();x*=flag;
  57. }
  58. void calc(int x)
  59. {
  60. int id=q[x].id,n=q[x].n,m=q[x].m,last=0,t=min(n,m);
  61. for (int i=1;i<=t;i=last+1)
  62. {
  63. last=min(n/(n/i),m/(m/i));
  64. ans[id]+=(n/i)*(m/i)*(query(last)-query(i-1));
  65. }
  66. }
  67. int main()
  68. {
  69. in(T);int now=0;
  70. 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));
  71. init();sort(q+1,q+T+1);sort(f+1,f+maxn+1);
  72. for (int i=1;i<=T;i++)
  73. {
  74. while (now+1<=maxn&&f[now+1].a<=q[i].a)
  75. {
  76. now++;
  77. for (int j=f[now].b;j<=maxn;j+=f[now].b) add(j,f[now].a*mu[j/f[now].b]);
  78. }
  79. calc(i);
  80. }
  81. for (int i=1;i<=T;i++) printf("%d\n",ans[i]&MAXINT);
  82. }

【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. .NET 托管、非托管、本地:这些代码有什么区别?

    http://www.codeguru.com/Csharp/.NET/cpp_managed/article.php/c4871 本文内容 什么是托管代码? 什么是非托管代码? 什么是本地代码? 托 ...

  2. C#.NET常见问题(FAQ)-如何让TabControl可以动态增加或删除

    动态插入可以使用TabPages.Insert方法   动态删除可以用Remove方法   更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/aceta ...

  3. 剑指offer 高速排序

    高速排序一般的写法.教科书上非常具体,这里介绍作者的写法. 程序例如以下: #include<iostream> #include<stack> using namespace ...

  4. ccc如何在一台windows主机上搭建mysql主从复制

    参考:http://www.cnblogs.com/wzjbk/p/6266899.htmlc 进入mysql: 进入到mysql的bin目录下才可以输入 mysql -hlocalhost -uro ...

  5. 10分钟精通require.js

    require.js的诞生,就是为了解决这两个问题:(1)实现js文件的异步加载,避免网页失去响应:(2)管理模块之间的依赖性,便于代码的编写和维护. 实例下载:require.js应用实例 一.re ...

  6. 树莓派通过GPIO控制步进电机

    一.接线方式与GPIO调用方法: 电源接入+5v和GND In1-4分别接GPIO1-4 正转时,GPIO1-4分次传入:[1,0,0,0],[sleep],[0,1,0,0],[sleep],[0, ...

  7. SQL与SQL Server

    SQL--关系数据库的国际标准语言. SQL Server--著名的数据库管理系统.其他著名的数据库管理系统还有Oracle.Sybase等,它们都实现了SQL语言.   在SQL中,完成所有核心功能 ...

  8. Vue - 起手式

    0x00:前言 这次前言不想扯太多. 本文主要是记录一下自己的学习历程,顺带做一个总结. 当中有參考 Vue.js 的中文文档,也有去查看其它大大们给出的总结. 最后也是一个期盼,希望能够帮助到其它有 ...

  9. Data De-duplication

    偶尔看到data deduplication的博客,还挺有意思,记录之 http://blog.csdn.net/liuben/article/details/5829083?reload http: ...

  10. 目前主流的MQ

    RabbitMQ.ActiveMQ.Jafka/Kafka.ZeroMQ.Redis等 这些mq框架的优缺点以及适用场景可自行百度. 后面我将对部分MQ框架进行比较深的学习