\(\mathcal{Description}\)

  Link.

  在一个 \(\mathbb R^2\) 的 \((0,0)\) 处有一颗棋子,对于参数 \(a,b\),若它当前坐标为 \((x,y)\),则它下一步可以走到 \((x\pm a,y\pm b)\) 和 \((x\pm b,y\pm a)\)。令 \(p(s,t)\) 表示 \(a=s,b=t\) 时,棋子是否能走遍所有整点。求:

\[\sum_{i=1}^n\sum_{j=1}^np(a,b)
\]

  答案自然溢出。

  \(T\) 组数据,\(nT\le10^{11}\)。

\(\mathcal{Solution}\)

  首先来描述 \(p(s,t)\),运用“组合操作”的思想,一颗棋子能走到所有整点,当且仅当它能位移 \((\pm 1,0)\) 和 \((0,\pm 1)\)。结合样例想一下发现 \(p(s,t)=[2\not|(s+t)\land\gcd(s,t)=1]\)。于是问题等价于求 \(n\) 以内奇偶性不同且互素的数对个数。推式子:

\[\begin{aligned}
\sum_{i=1}^n\sum_{j=1}^n[2\not|(s+t)\land\gcd(s,t)=1]&=\sum_{i=1}^n\sum_{j=1}^n[\gcd(i,j)=1]-\sum_{i=1}^n\sum_{j=1}^n[2\not|i][2\not|j][\gcd(i,j)=1]\\
&=\sum_{d=1}^n\mu(d)\lfloor\frac{n}{d}\rfloor^2-\sum_{d=1}^n[2\not|d]\mu(d)\lceil\frac{n}{d}\rceil^2
\end{aligned}
\]

  所以问题在于求:

\[\sum_{i=1}^n[2|i]\mu(i)=-\sum_{i=1}^{\lfloor\frac{n}2\rfloor}\mu(i)+\sum_{i=1}^{\lfloor\frac{n}2\rfloor}[2|n]\mu(i)
\]

  利用 \(\mu\) 积性,\(2\) 与奇数互素可以化成后面的样子,前一项杜教筛,后一项递归到规模小一半的原问题,记忆化一下直接计算即可。

  复杂度 \(\mathcal O(n^{\frac{2}3})\)(?

\(\mathcal{Code}\)

  求奇偶 \(\mu\) 的函数写得有点丑,知道意思就行 owo。

  1. /* Clearink */
  2. #include <cstdio>
  3. #include <tr1/unordered_map>
  4. typedef unsigned long long ULL;
  5. const int MAXN = 7e6;
  6. ULL n;
  7. int pn, pr[MAXN + 5], mu[MAXN + 5], mus[MAXN + 5], emus[MAXN + 5];
  8. bool vis[MAXN + 5];
  9. std::tr1::unordered_map<ULL, ULL> remmu, rememu;
  10. inline void sieve ( const int n ) {
  11. mu[1] = mus[1]= 1;
  12. for ( int i = 2; i <= n; ++ i ) {
  13. if ( ! vis[i] ) pr[++ pn] = i, mu[i] = -1;
  14. for ( int j = 1, t; j <= pn && ( t = i * pr[j] ) <= n; ++ j ) {
  15. vis[t] = true;
  16. if ( !( i % pr[j] ) ) break;
  17. mu[t] = -mu[i];
  18. }
  19. mus[i] = mus[i - 1] + mu[i];
  20. emus[i] = emus[i - 1] + !( i & 1 ) * mu[i];
  21. }
  22. }
  23. inline ULL calcMus ( const ULL n ) {
  24. if ( n <= MAXN ) return mus[n];
  25. if ( remmu.count ( n ) ) return remmu[n];
  26. ULL ret = 1;
  27. for ( ULL l = 2, r; l <= n; l = r + 1 ) {
  28. r = n / ( n / l );
  29. ret -= ULL ( r - l + 1 ) * calcMus ( n / l );
  30. }
  31. return remmu[n] = ret;
  32. }
  33. inline ULL calcEvenMus ( const ULL n ) {
  34. if ( n <= MAXN ) return emus[n];
  35. if ( rememu.count ( n ) ) return rememu[n];
  36. return rememu[n] = calcEvenMus ( n >> 1 ) - calcMus ( n >> 1 );
  37. }
  38. inline ULL calcOddMus ( const ULL n ) {
  39. return calcMus ( n ) - calcEvenMus ( n );
  40. }
  41. int main () {
  42. sieve ( MAXN );
  43. int T;
  44. for ( scanf ( "%d", &T ); T --; ) {
  45. scanf ( "%llu", &n ); ULL ans = 0;
  46. for ( ULL l = 1, r; l <= n; l = r + 1 ) {
  47. r = n / ( n / l );
  48. ans += ( calcMus ( r ) - calcMus ( l - 1 ) ) * ( n / l ) * ( n / l );
  49. ans -= ( calcOddMus ( r ) - calcOddMus ( l - 1 ) )
  50. * ( n / l + 1 >> 1 ) * ( n / l + 1 >> 1 );
  51. }
  52. printf ( "%llu\n", ans );
  53. }
  54. return 0;
  55. }

Solution -「LGR-087」「洛谷 P6860」象棋与马的更多相关文章

  1. 「区间DP」「洛谷P1043」数字游戏

    「洛谷P1043」数字游戏 日后再写 代码 /*#!/bin/sh dir=$GEDIT_CURRENT_DOCUMENT_DIR name=$GEDIT_CURRENT_DOCUMENT_NAME ...

  2. Solution -「JSOI 2019」「洛谷 P5334」节日庆典

    \(\mathscr{Description}\)   Link.   给定字符串 \(S\),求 \(S\) 的每个前缀的最小表示法起始下标(若有多个,取最小的).   \(|S|\le3\time ...

  3. Solution -「洛谷 P4372」Out of Sorts P

    \(\mathcal{Description}\)   OurOJ & 洛谷 P4372(几乎一致)   设计一个排序算法,设现在对 \(\{a_n\}\) 中 \([l,r]\) 内的元素排 ...

  4. Solution -「POI 2010」「洛谷 P3511」MOS-Bridges

    \(\mathcal{Description}\)   Link.(洛谷上这翻译真的一言难尽呐.   给定一个 \(n\) 个点 \(m\) 条边的无向图,一条边 \((u,v,a,b)\) 表示从 ...

  5. Solution -「APIO 2016」「洛谷 P3643」划艇

    \(\mathcal{Description}\)   Link & 双倍经验.   给定 \(n\) 个区间 \([a_i,b_i)\)(注意原题是闭区间,这里只为方便后文描述),求 \(\ ...

  6. 「洛谷4197」「BZOJ3545」peak【线段树合并】

    题目链接 [洛谷] [BZOJ]没有权限号嘤嘤嘤.题号:3545 题解 窝不会克鲁斯卡尔重构树怎么办??? 可以离线乱搞. 我们将所有的操作全都存下来. 为了解决小于等于\(x\)的操作,那么我们按照 ...

  7. 「洛谷3338」「ZJOI2014」力【FFT】

    题目链接 [BZOJ] [洛谷] 题解 首先我们需要对这个式子进行化简,否则对着这么大一坨东西只能暴力... \[F_i=\sum_{j<i} \frac{q_iq_j}{(i-j)^2}-\s ...

  8. 「BZOJ2733」「洛谷3224」「HNOI2012」永无乡【线段树合并】

    题目链接 [洛谷] 题解 很明显是要用线段树合并的. 对于当前的每一个连通块都建立一个权值线段树. 权值线段树处理操作中的\(k\)大的问题. 如果需要合并,那么就线段树暴力合并,时间复杂度是\(nl ...

  9. 「洛谷3870」「TJOI2009」开关【线段树】

    题目链接 [洛谷] 题解 来做一下水题来掩饰ZJOI2019考炸的心情QwQ. 很明显可以线段树. 维护两个值,\(Lazy\)懒标记表示当前区间是否需要翻转,\(s\)表示区间还有多少灯是亮着的. ...

随机推荐

  1. Cannot uninstall 'pyparsing'. It is a distutils installed project

    我的环境: [root@ansible ~]# python -V Python 2.7.5 [root@ansible ~]# cat /etc/redhat-release CentOS Linu ...

  2. systemd学习及使用

    什么是systemd? (译)systemd是linux系统的一组基础构件块.它提供了一个系统和服务的管理,它以PID 1 的形式运行并启动系统的其余部分.systemd 使用积极的并行化功能,使用s ...

  3. 实验 2 :Mininet 实验 —— 拓扑的命令脚本

    实验2: Mininet 实验--拓扑的命令脚本 一.实验目的 掌握 Mininet 的自定义拓扑生成方法:命令行创建.Python 脚本编写 二 .实验任务 通过使用命令行创建.Python 脚本编 ...

  4. FastDFS文件的上传和下载

    一.FastDFS概述: FastDFS是一个开源的轻量级分布式文件系统,他对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.下载)等,解决了大容量存储和负载均衡的问题,高度追求高性能 ...

  5. 《剑指offer》面试题18. 删除链表的节点

    问题描述 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], val = ...

  6. rocketmq实现延迟队列精确到秒级实现(总结编)

    前言篇: 为了节约成本,决定通过自研来改造rocketmq,添加任意时间延迟的延时队列,开源版本的rocketmq只有支持18个等级的延迟时间, 其实对于大部分的功能是够用了的,但是以前的项目,全部都 ...

  7. 【解决了一个小问题】golang build中因为缓存文件损坏导致的编译错误

    编译的过程中出现了一个吓人的错误: GOROOT=C:\Go #gosetup GOPATH=C:\Users\ahfuzhang\go #gosetup C:\Go\bin\go.exe mod t ...

  8. Cesium入门11 - Interactivity - 交互性

    Cesium入门11 - Interactivity - 交互性 Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ ...

  9. 华为联运游戏审核驳回:在未安装或需更新HMS Core的手机上,提示安装,点击取消后,游戏卡屏(集成的6.1.0.301版本游戏SDK)

    问题描述 更新游戏SDK到6.1.0.301版本之后,游戏包被审核驳回:在未安装或需更新华为移动服务版本(HMS Core)的手机上,提示安装华为移动服务(HMS Core),点击取消,游戏卡屏.修改 ...

  10. CSS快速入门(三)

    目录 字体相关调整 背景相关调整 控制背景平铺 调整背景图像的大小 边框属性 圆与圆角 盒模型 块级盒子(Block box) 和 内联盒子(Inline box) display属性 盒子模型 盒模 ...