Hihocoder1456 Rikka with Lattice
众所周知,萌萌哒六花不擅长数学,所以勇太给了她一些数学问题做练习,其中有一道是这样的:
勇太有一个$n times m$的点阵,他想要从这$n times m$个点中选出三个点 ${A,B,C}$,满足:
- 三角形$ABC$面积不为$0$且其内部不存在整点。
- 边$AB$,$BC$,$CA$上不存在除了端点以外的整点。
现在勇太想要知道有多少种不同的选取方案满足条件。
当然,这个问题对于萌萌哒六花来说实在是太难了,你可以帮帮她吗?
注意${A,B,C}$与${B,A,C}$视为同一种方案。
$n,m leqslant 5 times 10^9$。
题解
一道比较有趣的数论题。看范围应该能猜到是杜教筛一类的东西,但是推不出第一步的式子啊= =
首先考虑题目这个奇怪的条件,其实由皮克定理,我们可以得到,这个三角形的面积为$frac{1}{2}$,也就是说,题目要求的就是面积为$frac{1}{2}$的三角形的个数。
考虑这种三角形大概长什么样子,然后你会发现它只能长成这样:
考虑一个$a times b$的矩形,以这个矩形的两个相对的点为其中两个顶点的三角形的个数。设$vec{BE}$的坐标为$(x,y)$那么这个三角形的面积就可以表示为:
$$S=frac{1}{2}|vec{BE} times vec{BD}|=frac{1}{2}|ay-bx|$$
令$S=frac{1}{2}$,则有$ay-bx=pm 1$。
由裴蜀原理,这个方程仅在$gcd(a,b)=1$时有解,且每个方程恰好有一组解。再把对角线换一下,于是当$gcd(a,b)=1$时,会有$4$个这样的三角形。
然后这个奇怪的题,终于被我们化成了这样的式子:
$$sum_{i=1}^{n}sum_{j=1}^{m}[gcd(i,j)=1]4(n-i)(m-j)$$
莫比乌斯反演一下,就变成这样了:
$$4 sum_{x=1}^{min(n,m)} mu(x) sum_{i=1}^{lfloor frac{n}{x} rfloor} sum_{j=1}^{lfloor frac{m}{x} rfloor} nm - mix - njx + ijx^2$$
令$S(n)=sum_{i=1}^{n}i=frac{n(n+1)}{2}$把式子再化简一下,就变成:
$$4 sum_{x=1}^{min(n,m)} mu(x)(lfloor frac{n}{x} rfloor lfloor frac{m}{x} rfloor nm-x lfloor frac{m}{x} rfloor S(lfloor frac{n}{x} rfloor)-x lfloor frac{n}{x} rfloor S(lfloor frac{m}{x} rfloor)+x^2 S(lfloor frac{m}{x} rfloor) S(lfloor frac{n}{x} rfloor))$$
终于,这个式子的求法很显然了,可以直接枚举,$O(n)$计算。然而这还是过不了,得加上杜教筛。
这里杜教筛要筛的东西还挺多的,一个是$sum_{i=1}^{n}mu(i)$,一个是$sum_{i=1}^{n}mu(i)i$,还要筛出$sum_{i=1}^{n}mu(i)i^2$。
关于这三个函数的筛法,我都在这里讲一下:
关于杜教筛,我们知道有个这样的式子:
$$L(n)-g(1)F(n)=sum_{i=2}^n g(i) F(lfloorfrac{n}{i}rfloor)$$
其中$f*g=l$。
对于$sum_{i=1}^{n}mu(i)$,我们是令$g=1$,利用$sum_{d|n}mu(d)=[n=1]$,于是使得$L(n)=1$,从而完成计算;
对于$sum_{i=1}^{n}mu(i)i$,我们则令$g(i)=i$,那么$sum_{d|n}mu(d)d times frac{n}{d}=1$,从而$L(n)=1$,从而实现了杜教筛;
对于$sum_{i=1}^{n}mu(i)i^2$,类似地,我们令$g(i)=i^2$,那么$sum_{d|n}mu(d)d^2 times (frac{n}{d})^2=1$,从而$L(n)=1$,从而也实现了杜教筛;
由于$5 times 10^9 times 5 times 10^9=2.5 times 10^{19}$超过了long long
的范围,因此取模变得很恶心,时常要记得取模。
偷懒用了std::map
,所以时间复杂度$O(n^{frac{2}{3}}logn)$。
代码
|
|
Hihocoder1456 Rikka with Lattice的更多相关文章
- hihocoder #1456 : Rikka with Lattice(杜教筛)
hihocoder #1456 : Rikka with Lattice(杜教筛) 题意 : 给你一个\(n*m\)方格图,统计上面有多少个格点三角形,除了三个顶点,不覆盖其他的格点(包括边和内部). ...
- Lattice Reduction (LLL) 算法C代码实现
废话不多说,大名鼎鼎的Lenstra-Lenstra-Lovasz(LLL) 算法.实现参考论文:Factoring Polynomials with Rational Coefficients, 作 ...
- lattice 与 modelsim 仿真 笔记
对于 lattice Diamond 与 modelsim 的联合仿真,我总结了一句话,那就是—— 难者不会,会者不难. 也许刚开始 觉得 摸不着 头脑,但是 一旦学会 感觉还是很简单和直观的. ...
- Lattice Codes
最近在做的一些关于lattice codes的工作,想记录下来. 首先,我认为lattice coding是一种联合编码调制技术,将消息序列映射到星座点.其中一个良好的性质是lattice point ...
- Lattice FPGA 板子 调试笔记
最近在调试LATTICE FPGA 做的视频板子,颇不顺利,所以记录下来作为以后的参考: 1.FPGA的IO口不是所有的都是双向的,有些有特殊作用的是单向的. 在查阅 LatticeECP3-17E ...
- LATTICE 存储之FIFO的使用
坑,,以后填 对于Lattice 的 FIFO 存储器分为两种,见下图: 这两个的主要区别是一个后面加DC一个不加,那这个DC是什么意思呢??DC这里是Dual Clock的意思,也就是双时钟的意 ...
- 2016暑假多校联合---Rikka with Sequence (线段树)
2016暑假多校联合---Rikka with Sequence (线段树) Problem Description As we know, Rikka is poor at math. Yuta i ...
- Lattice Diamond 学习之编译、检查和设置约束
在新建工程以及完成代码的输入之后.则就要进行编译,并检测错误. 一. Generate Hierarchy(产生层次结构). 1. 点击Generate Hierarchy 图标或者Design -- ...
- Lattice Diamond 和 ispLEVER 的不同之处
Lattice Diamond 和 ispLEVER.有一些不同,尤其是如何管理工程的不同,包括以下几点: 1.ispLEVER 有多种工程类型,不同的程序文件类型需要不同的类型的工程:但是Diamo ...
随机推荐
- php安装swoole2.1.2
准备环境: cos7.2 & php 7.1.7 1.www.swoole.com找到对应版本2.使用git clone或则 wget 命令(下载后需解压)进行下载3.在swoole目录 ...
- CF 1096D Easy Problem [动态规划]
题目链接:http://codeforces.com/problemset/problem/1096/D 题意: 有一长度为n的字符串,每一字符都有一个权值,要求现在从中取出若干个字符,使得字符串中没 ...
- springBoot中mybatis错误之 Property 'configuration' and 'configLocation' can not specified with together 解决
mybatis.config-location与mybatis.config-locations不同 mybatis.config-location不加载全局配置文件
- 安装R的h5包
系统 redhat7 安装H5的包, 依赖系统hdf5包,如下安装完, 发现版本不一致, sudo yum install hdf5-devel 解决办法: 移花接木 sudo ln -s /opt/ ...
- 17.3.13---socket网络套接字介绍--函数和数据类型
1----Socket类型 套接字格式:socket(family,type[,protocal])使用给定的地址族,套接字类型,协议编号(默认为0)来创建套接字 socket类型 描述 socket ...
- Spring 如何解决循环依赖的问题
Spring 如何解决循环依赖的问题 https://blog.csdn.net/qq_36381855/article/details/79752689 Spring IOC 容器源码分析 - 循环 ...
- Opencv笔记(二):图像的基本操作——续写
1.图像的透视变换 对于视角变换,我们需要一个 3x3 变换矩阵.在变换前后直线还是直线.要构建这个变换矩阵,你需要在输入图像上找 4 个点,以及他们在输出图像上对应的位置.这四个点中的任意三个都不能 ...
- [HNOI2019]鱼(计算几何)
看到数据范围n<=1000,但感觉用O(n^2)不现实,所以考虑方向应该是O(n^2logn). 一种暴力做法:用vector存到1点相同的2点和到2点相同的1点,然后枚举A,枚举BC,再枚举D ...
- redis维护节点常用操作
维护节点 添加主节点 hash槽重新分配 添加从节点 删除结点 1 添加主节点 集群创建成功后可以向集群中添加节点,下面是添加一个master主节点 添加7007结点作为新节点 执行命令:./redi ...
- shell_backup_MySQL
#!/bin/bash #可修改如下参数backup_filename=$(date +%Y%m%d%H%M%S)backup_tmp_dir=/data/backup/ip=10.0.1.182us ...