传送门

Sol

设 \(f(d)\) 表示 \(d\) 所有约数中第二大的,\(low_d\) 表示 \(d\) 的最小质因子

\[f(d)=\frac{d}{low_d}
\]

那么

\[\sum_{i=1}^{n}\sum_{j=1}^{n}sgcd^k(i,j)
\]

\[=\sum_{i=1}^n\sum_{j=1}^{n}f^k(gcd(i,j))
\]

\[=\sum_{d=1}^{n}f^k(d)\sum_{i=1}^{n}\sum_{j=1}^{n}[gcd(i,j)=d]
\]

\[=\sum_{d=1}^{n}f^k(d)\sum_{i=1}^{\lfloor \frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor \frac{n}{d}\rfloor}[gcd(i,j)=1]
\]

\[=\sum_{d=1}^{n}f^k(d)(2\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\varphi(i)-1)
\]

可以数论分块,后面的 \(\varphi\) 直接杜教筛

考虑计算

\[\sum_{d=2}^{n}f^k(d)=\sum_{d=2}^{n}\frac{d}{low_d}^k
\]

设 \(p_j\) 表示第 \(j\) 个质数

\(g(x,i)\) 表示 \(2\) 到 \(x\) 之间最小质因子大于等于 \(p_i\) 的或者质数的 \(f\) 的 \(k\) 次方和

\(g'(x,i)\) 表示 \(2\) 到 \(x\) 之间最小质因子大于等于 \(p_i\) 的或者质数的 \(k\) 次方和

设 \(s(i)\) 表示小于等于 \(p_i\) 的质数的 \(k\) 次方和

那么就是要求 \(g(n, 1)\)

\(s\) 直接 \(min25\) 筛

\[g(x,i)=g(x,i+1)+\sum_{e=1}^{p_i^{e+1}\le x}p_i^{k(e-1)}(g'(\lfloor\frac{x}{p_i^{e}}\rfloor,i+1)-s(i)+p_i^{k})
\]

\[g'(x,i)=g'(x,i+1)+\sum_{e=1}^{p_i^{e+1}\le x}p_i^{ke}(g'(\lfloor\frac{x}{p_i^{e}}\rfloor,i+1)-s(i)+p_i^{k})
\]

这里要用到自然幂数和求和,用第二类斯特林数就好了

  1. # include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef unsigned int uint;
  5. inline uint Pow(uint x, int y) {
  6. register uint ret = 1;
  7. for (; y; y >>= 1, x = x * x) if (y & 1) ret = ret * x;
  8. return ret;
  9. }
  10. const int maxn(1e6 + 5);
  11. int pr[maxn], tot, k, d, id1[maxn], id2[maxn], cnt, phi[maxn];
  12. uint n, s[55][55], f[maxn], g[maxn], val[maxn], sk[maxn];
  13. uint s1[maxn], s2[maxn], sphi[maxn], sp[maxn];
  14. bitset <maxn> ispr;
  15. inline void Sieve(int mx) {
  16. register int i, j;
  17. for (phi[1] = 1, ispr[1] = 1, i = 2; i <= mx; ++i) {
  18. if (!ispr[i]) pr[++tot] = i, sk[tot] = sk[tot - 1] + Pow(i, k), phi[i] = i - 1;
  19. for (j = 1; j <= tot && pr[j] * i <= mx; ++j) {
  20. ispr[i * pr[j]] = 1;
  21. if (i % pr[j]) phi[i * pr[j]] = phi[i] * (pr[j] - 1);
  22. else {
  23. phi[i * pr[j]] = phi[i] * pr[j];
  24. break;
  25. }
  26. }
  27. }
  28. for (i = 1; i <= mx; ++i) sphi[i] = sphi[i - 1] + phi[i];
  29. }
  30. # define ID(x) ((x) <= d ? id1[x] : id2[n / (x)])
  31. inline uint Sum(uint x) {
  32. register uint i, j, v = 0, t, r, tmp = k <= x ? k : x;
  33. for (i = 1; i <= tmp; ++i) {
  34. t = i + 1, r = s[k][i];
  35. for (j = x - i + 1; j <= x + 1; ++j)
  36. if (t > 1 && j % t == 0) r *= j / t, t = 1;
  37. else r = r * j;
  38. v += r;
  39. }
  40. return v;
  41. }
  42. uint Sumphi(uint x) {
  43. if (x <= d) return sphi[x];
  44. if (sp[ID(x)]) return sp[ID(x)];
  45. register uint ans = (x & 1) ? ((x + 1) >> 1) * x : (x >> 1) * (x + 1), i, j;
  46. for (i = 2; i <= x; i = j + 1) j = x / (x / i), ans -= Sumphi(x / i) * (j - i + 1);
  47. return sp[ID(x)] = ans;
  48. }
  49. int main() {
  50. register uint i, j, e, ans = 0, lst = 0, cur, r, v, tmp, now;
  51. scanf("%u%d", &n, &k), Sieve(d = sqrt(n));
  52. for (i = 1; i <= 50; ++i)
  53. for (s[i][1] = 1, j = 2; j <= i; ++j)
  54. s[i][j] = s[i - 1][j] * j + s[i - 1][j - 1];
  55. for (i = 1; i <= n; i = j + 1) {
  56. val[++cnt] = n / i, j = n / (n / i);
  57. val[cnt] <= d ? id1[val[cnt]] = cnt : id2[n / val[cnt]] = cnt;
  58. f[cnt] = val[cnt] - 1, g[cnt] = Sum(val[cnt]) - 1;
  59. }
  60. for (i = 1; i <= tot && pr[i] * pr[i] <= n; ++i)
  61. for (j = 1; j <= cnt && pr[i] * pr[i] <= val[j]; ++j) {
  62. f[j] -= f[ID(val[j] / pr[i])] - i + 1;
  63. g[j] -= (sk[i] - sk[i - 1]) * (g[ID(val[j] / pr[i])] - sk[i - 1]);
  64. }
  65. for (i = 1; i <= cnt; ++i) s1[i] = f[i], s2[i] = g[i];
  66. for (r = 1; r <= tot && pr[r] * pr[r] <= n; ++r);
  67. for (i = r - 1; i; --i)
  68. for (tmp = sk[i] - sk[i - 1], j = 1; j <= cnt && pr[i] * pr[i] <= val[j]; ++j)
  69. for (cur = e = 1, v = pr[i]; v <= val[j] / pr[i]; ++e, v *= pr[i], cur *= tmp)
  70. now = (s2[ID(val[j] / v)] - sk[i] + tmp) * cur, s1[j] += now, s2[j] += tmp * now;
  71. for (i = 1; i <= n; i = j + 1) {
  72. j = n / (n / i), cur = s1[ID(j)];
  73. ans += (cur - lst) * (Sumphi(n / i) * 2 - 1), lst = cur;
  74. }
  75. printf("%u\n", ans);
  76. return 0;
  77. }

51NOD1847:奇怪的数学题的更多相关文章

  1. [51nod1847]奇怪的数学题

    description 51nod 求\[\sum_{i=1}^{n}\sum_{j=1}^{n}sgcd(i,j)^k\]其中\(sgcd(i,j)\)表示\(i,j\)的次大公约数,如果\(gcd ...

  2. 51nod1847 奇怪的数学题 (Min_25筛+第二类斯特林数)

    link \(\sum_{i=1}^n\sum_{j=1}^n\mathrm{sgcd}(i,j)^k=\sum_{p=1}^ns(p)^k\sum_{i=1}^n\sum_{j=1}^n[\gcd( ...

  3. 【51NOD 1847】奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数)

    [51NOD 1847]奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数) 题面 51NOD \[\sum_{i=1}^n\sum_{j=1}^nsgcd(i,j)^k\] 其中\( ...

  4. [51nod 1847]奇怪的数学题

    [ 51nod 1847 ]奇怪的数学题 题目   点这里看题目. 分析   是挺奇怪的......   以下定义质数集合为\(P\),\(p_i\)为第\(i\)个质数.   定义\(mp(x)\) ...

  5. 【51NOD1847】奇怪的数学题 min_25筛

    题目描述 记\(sgcd(i,j)\)为\(i,j\)的次大公约数. 给你\(n\),求 \[ \sum_{i=1}^n\sum_{j=1}^n{sgcd(i,j)}^k \] 对\(2^{32}\) ...

  6. 【51nod1847】 奇怪的数学题

    就当我是 A 了此题吧... 首先预备知识有点多(因为题目要处理的东西都挺毒瘤): 杜教筛运用(当然你可以用其他筛?) 第二类斯特林数相关定理 下降阶乘幂相关定理 min25 筛运用 好了可以关掉本题 ...

  7. 【51Nod1847】奇怪的数学题

    ​ 记\(f(x)=\)\(x\)的次大因数,那么\(sgcd(i,j)=f(gcd(i,j))\). 下面来推式子: \[ \begin{aligned} \sum_{i=1}^n\sum_{j=1 ...

  8. 【51nod1847】奇怪的数学题(Min_25筛+杜教筛)

    题面 传送门 题解 这题有毒--不知为啥的错误调了半天-- 令\(f(i)={sgcd(i)}\),那么容易看出\(f(i)\)就是\(i\)的次大质因子,用\(i\)除以它的最小质因子即可计算 于是 ...

  9. 【51nod 1847】奇怪的数学题

    题目描述 给出 N,K ,请计算下面这个式子: \(∑_{i=1}^N∑_{j=1}^Nsgcd(i,j)^k\) 其中,sgcd(i, j)表示(i, j)的所有公约数中第二大的,特殊地,如果gcd ...

随机推荐

  1. Dreamweaver_CS6安装及破解文件

    资源下载地址: 链接: https://pan.baidu.com/s/1mhQ5DoO 密码: mnv3 1.下载,安装,先作为试用版安装 可能显示的页面不一样,但是就是安装试用版 2.接受许可协议 ...

  2. 哈工大ComingX-创新工场俱乐部正式成立

    当我把这两个Logo放在一起的时候,我有一种感觉,这种感觉同样存在于ComingX队员的心中.大学我们走到了一起,非你我所预料,却又如此自然.在感恩节的零点,我迫不及待地告诉各位ComingX队员和关 ...

  3. Java_异常处理(Exception)

    异常:Exception try{ //捕获异常 }catch{ //处理异常 } 异常处理机制: 1.在try块中,如果捕获了异常,那么剩余的代码都不会执行,会直接跳到catch中, 2.在try之 ...

  4. Centos7 自定义systemctl服务脚本

    序言篇: 之前工作环境一直使用Centos6版本,脚本一直在使用/etc/init.d/xxx:系统升级到Cento7后,虽然之前的启动脚本也可以使用,但一直没有使用systemctl 的自定义脚本. ...

  5. 2016级算法期末模拟练习赛-C.AlvinZH的青春记忆II

    1084 AlvinZH的青春记忆II 思路 中等题,二分. 简化题意,一列数字,每秒会自动-1,特殊操作可以使一个数在1s内-k,问这些数都减至0需要多久. 答案肯定在[1,xMax]之间,采用二分 ...

  6. FlowPortal-BPM——数据库交互:创建新接口(类库)—将数据提交给其他程序使用

    使用到的是“流程设计”→“自定义插件” 一.创建新类库 (1)新建类库→引用文件 (2)新建ado.net数据访问类(要操作的数据库) (3)右键类库名称→属性→生成→输出→路径:安装目录下UserD ...

  7. git配置教程

    一.配置ssh 1.检查本机是否有ssh key设置 如果没有则提示: No such file or directory 如果有则进入~/.ssh路径下(ls查看当前路径文件,rm删除所有文件) 2 ...

  8. docker入门之基础操作

    docker,我们可以把docker当作是简单的虚拟机.但这个虚拟机不像vm一样安装系统.所以我们又称之为容器.你可以理解成,容器就是虚拟机 docker与vm的对比 vmware:下载镜像——安装系 ...

  9. 2019.4.24 3D效果滚筒导航练习

    效果图: 彩千圣天下第一!(小声bb) 代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8 ...

  10. sql server 2008 R2 配置管理工具打不开

    使用 sql server 配置管理工具是报如下错误: 解决方法:   1 找出 sqlmgmproviderxpsp2up.mof 这个文件的位置   2 以管理员身份运行 mofcomp &quo ...