式子化出来是$\sum_{T=1}^m{\lfloor}\frac{n}{T}{\rfloor}{\lfloor}\frac{m}{T}{\rfloor}\sum_{k|T}\mu(\frac{T}{k})[\sigma(k)<=a]\sigma(k)$

如果没有a的限制的话,显然只要把后面那个sigma预处理出来

有了a的限制呢?考虑把询问按a从小到大排序,然后每次把所有满足$lasta<\sigma(k)<=nowa$(lasta指上个询问的a,nowa指当前询问的a)的加入后面那部分的贡献(开始时对于每个T预处理有哪些k满足$\sigma(k)=T$,这里就暴力枚举k使得$\sigma(k)$=当前要加入贡献的值,再暴力枚举k的倍数更新);用树状数组维护前缀和;复杂度是n*log^2+T*sqrt*log

错误记录:

1.121行<=n写成<=m;导致除以0;本地测试的时候只用了n=m的数据,所以没测出来

2.108行没规定这个<=500000

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<vector>
  5. using namespace std;
  6. #define fi first
  7. #define se second
  8. #define mp make_pair
  9. #define pb push_back
  10. typedef long long ll;
  11. typedef unsigned long long ull;
  12. typedef pair<int,int> pii;
  13. const ll N=;
  14. const ll M=;
  15. struct Q
  16. {
  17. ll n,m,a,num;
  18. }q[M+];
  19. ll qq;
  20. ll ans[M+];
  21. ll mu[N+],len,prime[N+];
  22. ll f1[N+],f2[N+],h[N+];
  23. //分别为最小质因子的p^k,1+p^0+p^1+..+p^k,函数值
  24. vector<int> dd[];
  25. bool nprime[N+];
  26. bool c1(const Q &a,const Q &b) {return a.a<b.a;}
  27. const ll md=1LL<<;
  28. #define lowbit(x) ((x)&(-x))
  29. ll d[N+];
  30. void add(ll p,ll x)
  31. {
  32. for(;p<=N;p+=lowbit(p)) d[p]+=x;
  33. }
  34. ll sum(ll p)
  35. {
  36. ll ans=;
  37. for(;p>;p-=lowbit(p)) ans+=d[p];
  38. return ans;
  39. }
  40. //ll Mod(ll a,ll b)
  41. //{
  42. // if(a>=0) return a%b;
  43. // else if(a%b==0) return 0;
  44. // else return b+a%b;
  45. //}
  46. int main()
  47. {
  48. ll i,j,k,n,m,an;
  49. mu[]=;h[]=;
  50. for(i=;i<=N;i++)
  51. {
  52. if(!nprime[i])
  53. {
  54. prime[++len]=i;mu[i]=-;
  55. f1[i]=i;f2[i]=i+;h[i]=i+;
  56. }
  57. for(j=;j<=len&&i*prime[j]<=N;j++)
  58. {
  59. nprime[i*prime[j]]=;
  60. if(i%prime[j]==)
  61. {
  62. mu[i*prime[j]]=;
  63. f1[i*prime[j]]=f1[i]*prime[j];
  64. f2[i*prime[j]]=f2[i]+f1[i*prime[j]];
  65. h[i*prime[j]]=h[i]/f2[i]*f2[i*prime[j]];
  66. break;
  67. }
  68. else
  69. {
  70. mu[i*prime[j]]=-mu[i];
  71. f1[i*prime[j]]=prime[j];
  72. f2[i*prime[j]]=+prime[j];
  73. h[i*prime[j]]=h[i]*f2[i*prime[j]];
  74. }
  75. }
  76. }
  77. for(i=;i<=N;i++)
  78. dd[h[i]].pb(i);
  79. /*
  80. ll ttt=0;
  81. for(i=1;i<=20000;i++) ttt=max(ttt,h[i]);
  82. printf("%lld",ttt);
  83. {
  84. ll a,n,m,k;
  85. while(1)
  86. {
  87. scanf("%lld%lld%lld",&n,&m,&a);
  88. if(n>m) swap(n,m);
  89. ll ans=0;
  90. for(ll T=1;T<=m;T++)
  91. {
  92. ll a1=0;
  93. for(k=1;k<=T;k++)
  94. if(T%k==0)
  95. {
  96. a1+=mu[T/k]*(h[k]<=a)*h[k];
  97. }
  98. ans+=(n/T)*(m/T)*a1;
  99. }
  100. printf("%lld\n",ans);
  101. }
  102. }*/
  103. scanf("%lld",&qq);
  104. for(i=;i<=qq;i++) scanf("%lld%lld%lld",&q[i].n,&q[i].m,&q[i].a),q[i].num=i;
  105. sort(q+,q+qq+,c1);
  106. for(i=,j=;i<=qq;i++)
  107. {
  108. while(j+<=q[i].a&&j+<=)
  109. {
  110. j++;
  111. for(auto d:dd[j])
  112. {
  113. for(k=d;k<=N;k+=d)
  114. {
  115. add(k,mu[k/d]*j);
  116. }
  117. }
  118. }
  119. if(q[i].n>q[i].m) swap(q[i].n,q[i].m);
  120. n=q[i].n;m=q[i].m;an=;
  121. for(ll i=,j;i<=n;i=j+)
  122. {
  123. j=min(n/(n/i),m/(m/i));
  124. an+=(n/i)*(m/i)*(sum(j)-sum(i-));
  125. }
  126. ans[q[i].num]=an;
  127. //printf("a%lld\n",an);
  128. }
  129. for(i=;i<=qq;i++) printf("%lld\n",ans[i]%md);
  130. return ;
  131. }

洛谷 P3312 [SDOI2014]数表的更多相关文章

  1. 洛谷 P3312 [SDOI2014]数表 解题报告

    P3312 [SDOI2014]数表 题目描述 有一张\(N*M\)的数表,其第\(i\)行第\(j\)列(\(1\le i \le n\),\(1 \le j \le m\))的数值为能同时整除\( ...

  2. 洛谷P3312 - [SDOI2014]数表

    Portal Solution 共\(T(T\leq2\times10^4)\)组测试数据.给出\(n,m(n,m\leq10^5),a(a\leq10^9)\),求\[ \sum_{i=1}^n\s ...

  3. [bzoj3529] [洛谷P3312] [Sdoi2014] 数表

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

  4. 洛谷P3312 [SDOI2014]数表(莫比乌斯反演+树状数组)

    传送门 不考虑$a$的影响 设$f(i)$为$i$的约数和 $$ans=\sum\limits_{i=1}^n\sum\limits_{j=1}^nf(gcd(i,j))$$ $$=\sum\limi ...

  5. 洛咕3312 [SDOI2014]数表

    洛咕3312 [SDOI2014]数表 终于独立写出一道题了...真tm开心(还是先写完题解在写的) 先无视a的限制,设\(f[i]\)表示i的约数之和 不妨设\(n<m\) \(Ans=\su ...

  6. P3312 [SDOI2014]数表

    啊啊啊我昨天怎么没写题解wwww 补昨日题解... 题目链接 : https://www.luogu.org/problemnew/show/P3312 也是莫反 我要把fft留到今天写 [和zyn小 ...

  7. 洛谷 P3313 [SDOI2014]旅行 解题报告

    P3313 [SDOI2014]旅行 题目描述 S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天面条神教.隐形独角兽教 ...

  8. luogu P3312 [SDOI2014]数表

    传送门 我们看要求的东西\[\sum_{i=1}^{n}\sum_{j=1}^{m}[\sigma(gcd(i,j))\le a]\sigma(gcd(i,j))\] 然而\(\le a\)比较烦,可 ...

  9. 洛谷P3317 [SDOI2014]重建 [Matrix-Tree定理]

    传送门 思路 相信很多人像我一样想直接搞Matrix-Tree定理,而且还过了样例,然后交上去一分没有. 但不管怎样这还是对我们的思路有一定启发的. 用Matrix-Tree定理搞,求出的答案是 \[ ...

随机推荐

  1. LeetCode之16----3Sums Closest

    题目: Given an array S of n integers, find three integers in S such that the sum is closest to a given ...

  2. R学习-- 数组和矩阵

    生成 4行5列的数组,逐列逐行赋值x = array(1:20, dim= c(4,5)) 依据已知向量生成二维数组i = array(c(1:3,3:1,4:6,5:7), dim=c(3,4))也 ...

  3. linux下如何用php读取word

    在实际的工作中遇到到要导入word格式的文件,经过努力,终于成功了. 在linux上用PHP读取WORD文档,其实是使用了 antiword程序把word文档转化为txt文档. 再使用php执行系统命 ...

  4. YTU 2419: C语言习题 等长字符串排序

    2419: C语言习题 等长字符串排序 时间限制: 1 Sec  内存限制: 128 MB 提交: 650  解决: 249 题目描述 在主函数中输入n(n<=10)个等长的字符串.用另一函数对 ...

  5. 计算机学院大学生程序设计竞赛(2015’12)The Magic Tower

    The Magic Tower Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  6. MySQL性能优化-I/O相关配置参数

    本文介绍InnoDB和MyISAM两种存储引擎的I/O相关参数配置. 1.InnoDB  I/O相关配置 Innodb是一种事务型的存储引擎,为了减少提交事务时产生的io开销,innodb采用了写日志 ...

  7. Silverlight实用窍门系列:1.Silverlight读取外部XML加载配置---(使用WebClient读取XAP包同目录下的XML文件))【附带实例源码】

    使用WebClient读取XAP包同目录下的XML文件 我们想要读取XAP包下面的XML文件,需要将此XML文件放在加载XAP包的网页的目录中去,然后使用URI方式读取此URL方式下的XML文件. 首 ...

  8. LA-3029(扫描线)

    题意: 给定一个n*m的矩阵,一些格子是空地“F”,一些是障碍"R",找出一个全部由F组成的面积最大的子矩阵; 思路: 对每个格子维护up[i][j],le[i][j],ri[i] ...

  9. codeforces 672B B. Different is Good(水题)

    题目链接: B. Different is Good time limit per test 2 seconds memory limit per test 256 megabytes input s ...

  10. CentOS 6.5升级到CentOS 7

    CentOS7 已经发布了,之前一直想在上面测试一下,一直没有机会,这次终于可以感受一下CentOS7了.一直使用CentOS6.5有一段时间了,但是由于它的内核版本依然停留在2.6.32,所以决定升 ...