题目

弱化版题目的传送门(【BZOJ2154】Crash的数字表格)

加强版题目的传送门(【BZOJ2693】jzptab)

思路&解法

题目是要求: \(\sum\limits_{i = 1}^{n}\sum\limits_{j = 1}^{m}lcm(i, j)\)

于是我们可以把式子化成这样:

\[\sum_{i = 1}^{n}\sum_{j = 1}^{m}\frac{ij}{gcd(i, j)}
\]

然后我们枚举gcd

\[\sum_{i = 1}^{n}\sum_{j = 1}^{m} \sum_{k = 1}^{min(n, m)}\frac{ij}{k}[gcd(i, j) == k]
\]

我们再把式子换一下

\[\sum\limits_{k = 1}^{min(n, m)}{\frac{1}{k}\sum\limits_{i = 1}^{n}\sum\limits_{j = 1}^{m}ij[gcd(i, j) == k]}
\]

\[\sum\limits_{k = 1}^{min(n, m)}{\frac{1}{k}\sum\limits_{i = 1}^{\lfloor{\frac{n}{k}}\rfloor}\sum\limits_{j = 1}^{\lfloor\frac{m}{k}\rfloor}ijk^2[gcd(i, j) == 1]}
\]

\[\sum^{min(n, m)}_{k = 1}k\sum_{i= 1}^{\lfloor{\frac{n}{k}}\rfloor}\sum_{j = 1}^{\lfloor{\frac{m}{k}}\rfloor}ij[gcd(i, j) ==1]
\]

反演一下

\[\sum_{k}^{min(n, m)} k \sum_{d = 1}^{min(\lfloor {\frac{n}{k}} \rfloor, \lfloor {\frac{m}{k}} \rfloor)}\mu(d) \times \sum_{i|d}\sum_{j|d} ij
\]

\[\sum_{k}^{min(n, m)} k\sum_{d = 1}^{min(\lfloor {\frac{n}{k}} \rfloor, \lfloor {\frac{m}{k}} \rfloor)} \mu(d) \times d^2\sum_{i=1}^{\lfloor{\frac{n}{kd}}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{kd}\rfloor} ij
\]

\[\sum_{k}^{min(n, m)} k\sum_{d = 1}^{min(\lfloor {\frac{n}{k}} \rfloor, \lfloor {\frac{m}{k}} \rfloor)} \mu(d)d^2 F(\lfloor{\frac{n}{kd}}\rfloor, \lfloor{\frac{m}{kd}}\rfloor)
\]

其中$$F(n, m) = {nm(n+1)(m+1)\over 4}$$

继续优化

\[\sum_{T=1}^{min(n, m)}{F(\lfloor{\frac{n}{T}}\rfloor, \lfloor{\frac{m}{T}}\rfloor)}\sum_{d|T}\mu(d)d^2{\frac{T}{d}}
\]

后面的\(\sum\limits_{d|T}\mu(d)d^2{\frac{T}{d}}\)的前缀和很容易求

代码

【BZOJ2693】jzptab

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; typedef long long LL; const LL mod = 100000009LL; const int N = 10000010; int p[N], total;
bool vis[N]; LL g[N]; void init()
{ g[1] = 1;
for (int i = 2; i <= 10000000; i++)
{ if (!vis[i]) p[++total] = i, g[i] = (LL) (1 - i + mod) % mod;
for (int j = 1; j <= total && i * (LL) p[j] <= 10000000; j++)
{ vis[i * p[j]] = 1;
if (i % p[j] == 0) { g[i * p[j]] = g[i]; break; }
else g[i * p[j]] = (g[i] * g[p[j]]) % mod;
}
}
for (int i = 2; i <= 10000000; i++) g[i] = (g[i] * i + g[i-1]) % mod;
} LL Get(int n) { return ((LL) n * (LL) (n+1) / 2LL) % mod; } LL Sum(int n, int m) { return (Get(n) * Get(m)) % mod; } LL Calc(int n, int m)
{ int last = 0;
LL Ans = 0;
for (int i = 1; i <= min(n, m); i = last+1)
{ last = min(n / (n/i), m / (m/i));
Ans = (Ans + (Sum(n/i, m/i) * (g[last] - g[i-1])) % mod) % mod;
}
return (Ans + mod) % mod;
} int main()
{ init();
int T;
scanf("%d", &T);
while (T--)
{ int n, m;
scanf("%d %d", &n, &m);
printf("%lld\n", Calc(n, m));
}
return 0;
}

【BZOJ2154】Crash的数字表格

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; typedef long long LL; const LL mod = 20101009LL; const int N = 10000010; int p[N], total;
bool vis[N]; LL g[N]; void init()
{ g[1] = 1;
for (int i = 2; i <= 10000000; i++)
{ if (!vis[i]) p[++total] = i, g[i] = (LL) (1 - i + mod) % mod;
for (int j = 1; j <= total && i * (LL) p[j] <= 10000000; j++)
{ vis[i * p[j]] = 1;
if (i % p[j] == 0) { g[i * p[j]] = g[i]; break; }
else g[i * p[j]] = (g[i] * g[p[j]]) % mod;
}
}
for (int i = 2; i <= 10000000; i++) g[i] = (g[i] * i + g[i-1]) % mod;
} LL Get(int n) { return ((LL) n * (LL) (n+1) / 2LL) % mod; } LL Sum(int n, int m) { return (Get(n) * Get(m)) % mod; } LL Calc(int n, int m)
{ int last = 0;
LL Ans = 0;
for (int i = 1; i <= min(n, m); i = last+1)
{ last = min(n / (n/i), m / (m/i));
Ans = (Ans + (Sum(n/i, m/i) * (g[last] - g[i-1])) % mod) % mod;
}
return (Ans + mod) % mod;
} int main()
{ init();
int n, m;
scanf("%d %d", &n, &m);
printf("%lld\n", Calc(n, m));
return 0;
}

一些其他的东西

弱化版题目可以\(O(n)\)过, 然而我是用\(O(\sqrt{n})\)的算法做的, 而且达到了惊人的18s, 比\(O(n)\)的解法慢多了。我哪里写锉了。。。。。。

最新文章

  1. 洛谷P1991无线通讯网[kruskal | 二分答案 并查集]
  2. asp.net MVC3 无法打开项目文件“E:\我们的项目\Project\HeatingMIS.Web\HeatingMIS.Web.csproj”。此安装不支持该项目类型。
  3. Python torndoa mysql 模块安装
  4. HttpWebRequest header configuration
  5. L# ForUnity Helloworld的更新方法
  6. MySQL5.6 on Windows 安装失败: String was not recognized as a valid DateTime
  7. 北京市小升初 zz
  8. Oracle导出的sql执行出错
  9. 加载不同的nib文件
  10. POJ2225+BFS
  11. linux开源论坛
  12. xmemcached的time out
  13. poj2096--Collecting Bugs(可能性dp第二弹,需求预期)
  14. Nginx集群之WCF大文件上传及下载(支持6G传输)
  15. zookeeper学习总结
  16. JDK配置环境变量不成功的原因
  17. vue项目中编写一个图片预览的公用组件
  18. JDBC:随机生成车牌号,批量插入数据库
  19. dotnet core瘦身发布
  20. form图片上传遇到错误

热门文章

  1. mysql有关时间是问题
  2. android Adapter总结
  3. 换个语言学一下 Golang (4)——变量与常量
  4. Attention-based Model
  5. BZOJ 1572 USACO 2009 Open 工作安排
  6. 解决WP程序 重复打开出现 “正在加载...” 字样 解决方案
  7. Master Nginx(6) - The Nginx HTTP Server
  8. hdu 4171 最短路
  9. Aggressive Cows 二分
  10. Android:隐藏ActionBar