题解 D. The Pool "蔚来杯"2022牛客暑期多校训练营7
出题人的题解实在是无法令人恭维,特此写一份自己的题解
【大意】
\(T\) 次询问,每次询问给定 \(n, m(1\leq n,m\leq 10^{18})\) ,问长宽分别为 \(n, m\) 的矩形顶点摆放在整点后;所有不同摆放方案中,每个方案完全包含的 \(1\times 1\) 格子数量的和是多少?
我们认为两个方案不同,当且仅当一个方案的矩形无法仅通过平移变换,得到另一个方案。
【分析】
我们将矩形 \(ABCD\) 的一个顶点放置在原点上,设 \(AB=n, AD=m\) ,则 \(B\) 点的点坐标需要满足 \(x_B^2+y_B^2=n^2\)
如果我们能找到所有满足条件的点坐标,那它们显然都是答案的候选(可能有的方案能通过别的方案平移得到、有的方案无法使得 \(D\) 在整点)
因此,当前的问题即是:给定 \(l\) ,如何求解所有满足 \(x_B^2+y_B^2=l\) 的点
转化一下问题,由于二维平面上的整点能唯一地对应复平面上,满足 \(\Re z, \Im z\in Z\) 的所有复数 \(z\) 。因此,我们可以直接以高斯整数 \(Z[i]\) 的方式描述待求问题:
求解有多少个高斯整数 \(z=x_B+i\cdot y_B\) ,使得 \(z\cdot \bar z=l\)
我们考虑将 \(l\) 进行质因数分解,显然可以将 \(l\) 分解为 \(\displaystyle l=2^{c_2}\cdot \prod_i p_i^{k_i} \cdot \prod_i q_i^{t_i}\) 的形式,其中 \(c_2\geq 0, k_i, t_i>0, q_i\) 为 \(4n+3\) 型质数,\(p_i\) 为 \(4n+1\) 型质数
根据高斯质数的规律,\(2=(1+i)(1-i), q_i\) 无法继续分解,而 \(p_i\) 能进一步分解为两个共轭的高斯质数 \((a+bi),(a-bi)\) 的乘积
为了对 \(p_i\) 进行高斯质数意义上的质因数分解,我们可以随机一个 \(t\neq 0\pmod {p_i}\) ,再令 \(\displaystyle k=t^{p_i-1\over 4}\bmod p_i\) 。根据二次剩余的理论,\(k^2\equiv \pm 1\pmod {p_i}\) ,取值为 \(-1\) 的概率恰为 \({1\over 2}\) 。
所以,我们期望两次随机,就能选出一个 \(k\) ,使得 \(k^2\equiv -1\pmod {p_i}\) ,即 \(p_i\mid (k^2+1)\) 。由于在 \(Z[i]\) 上,\(k^2+1=(k+i)(k-i)\) ,故有 \(p_i\mid (k+i)(k-i)\)
而
原文地址:https://www.cnblogs.com/JustinRochester/p/16573515.html
- Web漏洞演练平台 – ZVulDrill
- Android内存泄漏终极解决篇(上)
- 走近科学:我是如何入侵Instagram查看你的私人片片的
- 在线手写识别的多卷积神经网络方法
- 苹果发布OS X 10.9.2更新,修复SSL漏洞
- Android内存泄漏终极解决篇(下)
- 利用Volatility查找系统中的恶意DLL
- 雪人行动:利用IE10 0day漏洞的APT攻击剑指美国军方情报
- Android开发:最详细的 Toolbar 开发实践总结
- 关于yubikey对web应用的杞人之忧
- 利用旧版Android漏洞的E-Z-2-Use攻击代码已在Metasploit发布
- Android Studio你不知道的调试技巧
- Android 数据绑定框架DataBinding,堪称解决界面逻辑的黑科技
- 汽车黑客:没有Security就没有Safety
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python 基于jwt实现认证机制流程解析
- Keras – GPU ID 和显存占用设定步骤
- PHP中如何使用Redis接管文件存储Session详解
- 看我一波,Android获取进程名函数,代码优化到极致的操作!
- laravel5使用freetds连接sql server的方法
- opencv 图像滤波(均值,方框,高斯,中值)
- opencv 阈值分割的具体使用
- 浅谈keras 的抽象后端(from keras import backend as K)
- 在Keras中利用np.random.shuffle()打乱数据集实例
- 浅谈matplotlib中FigureCanvasXAgg的用法
- Keras自定义实现带masking的meanpooling层方式
- 利用keras使用神经网络预测销量操作
- 获取python运行输出的数据并解析存为dataFrame实例
- 如何使用Cython对python代码进行加密
- PHP快速排序算法实现的原理及代码详解