首页 > 其他分享 >P1 P2508 [HAOI2008]圆上的整点

P1 P2508 [HAOI2008]圆上的整点

时间:2023-08-20 09:45:07浏览次数:40  
标签:P1 bar 高斯 P2508 cdot 整数 共轭复数 圆上

[HAOI2008]圆上的整点

23.3.22 WE.

真是一道神题,特别是对于刚得了甲流滚回家摆烂从而有时间乱看而恰巧这几天上课刚学复数的我。

一直很好奇复数到底是什么,昨天晚上刷B站学习偶然看到了一个解释虚数的视频,结果也没看懂,只听说乘上一个 \(i\) 相当于旋转 \(90^{\circ}\) ,一想还真是!感觉挺神奇的,但又有点懵...

今天很幸运能偶然瞟了一眼,发现了这道题(貌似以前看到过好几次,但是没干出来)。


首先,讨论的都是整数。

接下来有几个概念:

(0.共轭复数)

1. 高斯整数

2. 高斯素数

都是复数的基本知识。


现在考虑题目,给出了一个 \(r \ (\leq 2e9)\) 为半径的原点圆,求多少个整点在其上。

转化一下就是求 \(a^2+b^2=r^2\) 的 \(a、b\) 个数。

这里可以引入共轭复数(高斯整数)的性质:\(z*\bar{z}=(a+bi)*(a-bi)=a^2+b^2\)

好有道理。

所以,原问题就转化为了:求有多少个高斯整数满足与其共轭复数乘积为 \(r^2\) 。


最关键的一步是在高斯整数上进行唯一分解。

同整数一样,高斯整数也存在着唯一分解式。(每个因子都不能再分)

比如 \(5=(2+i)(2-i)\) ,不能再分下去了。

而根据性质,\(-i^2=1, -1*-1=1\) ,所以上面的右式因子进行转化。即一个结果有四种方法得来:\(z \cdot \bar{z}=-z \cdot -\bar{z}=-iz \cdot i\bar{z}=iz \cdot -i\bar{z}\)

非常巧妙地对应了一个点的四象限90°旋转有4个点。

注意,此处的复数对应了坐标轴上的点(圆上的点)。(可以把点乘号前的部分看成圆上点,后面看成一个辅助运算的共轭复数(个人理解))


下面需要考虑一个定理(其实也有其它解法):费马平方和定理。

即大于4的整数素数有这样的一个性质:

若该素数是 \(4k+1\) 的形式,则该素数一定能被唯一表达成两个数平方和。

那么 \(4k+3\) 的形式显然就不行了,所以这种素因子就只能分解成整数乘整数型。而 \(4k+1\) 形式可以分解为一对共轭复数。


有什么用呢?

考虑 \(r^2\) 的高斯素数分解:不妨另 \(N=r^2\)

有: \(N=2^n\prod_{q_i=4k+3}q_i^{m_i}\prod_{p_j=4k+1}p_j^{k_j}\)

此处特意把 \(2\) 提出来是由原因的。

不过先看后面两个,显然,问题变成了N的划分问题,把右边怎么分才能形成N,且保证划分出的都得互相是共轭复数。其中,\(q_i\) 表示 \(N\) 的高斯素数因子,这玩意是不能被分成共轭复数之积的,所以只能平分,因此对答案不做贡献(*1),并且 \(m_i\) 一定是偶数,因为 \(N=r^2\)。而每一个 \(p_j^{k_j}\) 对答案的贡献是 \(k_j+1\) ,为什么呢?那是因为 \(p_j=z \cdot \bar{z}\) ,所以要么就把 \(z\) 给第一个因子,要么给第二个因子,所以考虑第一个因子拿到了多少个 \(z\) 即可。

现在只剩下 \(2\) 了。为什么 \(2\) 明明可以被分解成 \((i+1)(i-1)\) ,却不被考虑其贡献呢?画个图看看,发现两者实际上是成 \(90^{\circ}\)的。所以呢?所以,思考一下,如果把 \(2\) 考虑进去,那么就相当于考虑了 \((1+i)\) 和 \((1-i)\) ,相当于旋转了90°再去考虑了一个,多余了。

上面说过四种表示方式 \(z \cdot \bar{z}\) ,分别对应四个象限,所以最后的结果乘以四即可。这也说明不能考虑 \(2\) ,\(2\) 自己会率先考虑 \(2\) 个情况。

此题结了。

cin>>r;
//引入复数进行求解
for(ll i=2;i*i<=r;++i)
  if(!(r%i)){
    ll k=0;
    while(!(r%i)) ++k,r/=i;
    if(i%4==1) ans*=(k*2+1);//费马平方和定理 
  }
if(r!=1&&r%4==1) ans*=3;
cout<<ans*4<<'\n';
return 0;

okey.

标签:P1,bar,高斯,P2508,cdot,整数,共轭复数,圆上
From: https://www.cnblogs.com/mfc007/p/17643618.html

相关文章

  • 牛的旅行 luoguP1522 多余的换行造成的影响
    牛的旅行#include<bits/stdc++.h>usingnamespacestd;intread(){intf=1,x=0;charc=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){......
  • P1012 [NOIP1998 提高组] 拼数
     题解:这道题最大的坑:32和321,32321>32132 1#include<bits/stdc++.h>2usingnamespacestd;3stringa[25];4boolcmp(conststring&a,conststring&b)5{6return(a+b>b+a);//这里太妙了7}8intmain()9{10int......
  • PPT| XX大型制造业产品主数据蓝图方案 P112
    PPT共112页,由于篇幅有限,以下为部分资料.......
  • P1672 [USACO05FEB] Feed Accounting S 题解
    题目链接思路一道特别简单的差分模板题,其实也有点推理的感觉。对于每头牛,我们通过两次循环使用差分倒推出在这几天内它对我们饲料消耗的贡献,进而推出每一天的饲料消耗量,从\(D\)天到现在一共吃掉的饲料数为\(F1-F2\)的那一天即是我们所求的。输入的时候依照题意模拟一次差......
  • SP1837 PIE - Pie 题解
    题目链接思路一道简单二分答案题。对于每个确定的派的体积,设置左边界\(l\)、右边界\(r\)和尝试值\(mid\),用\(\operatorname{check}\)函数返回在每份有\(mid\)那么多派的情况下,可以分成几份。将这些结果加起来,与应分人数进行比较,如果份数小于人数,证明每一份分的太多了,将......
  • 虚拟机安装:VMware Tools安装错误——本程序需要您将此虚拟机上安装的操作系统更新到SP
    1.为系统版本问题,直接更换win7版本。提供sp1版本地址如下------百度找到的其他人的安装数据【Windows7SP1旗舰版x64安装版,安全补丁更新到了2015年的年初.大小:4739917824字节MD5:10AFCEF70AFCA7D2E4B5B6433C8F86ACSHA1:2D4816D9DF963469400CCFCA99BAA74260081F16CRC3......
  • Programming abstractions in C阅读笔记: p114-p117
    《ProgrammingAbstractionsinC》学习第48天,p114-p117,​总结如下:一、技术总结主要通过randomnumber介绍了随机数的相关用法,interface​示例(random.h)​,clientprogram示例(craps.c)。#include<stdio.h>#include"genlib.h"#include"random.h"staticboolTryToMakePo......
  • P1110题解
    首先我们考虑第一种情况怎么处理,显然我们可以给原数列的每个数开一个\(vector\),每加一个数丢到对应的\(vector\)后面就行了。再看第二个操作,你考虑新加一个数会有什么影响。原来的两个\(vector\)是这样的:新加一个数进去以后:原来的\(|y-x|\)要删除,新增了\(|x-z|\)和\(|z-y|\)......
  • P1966 火柴排队
    \(P1966\)火柴排队一、题目描述涵涵有两盒火柴,每盒装有\(n\)根火柴,每根火柴都有一个高度。现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:$\sum(a_i-b_i)^2$其中\(a_i\)表示第一列火柴中第\(i\)个火柴的高度,\(b_i\)表示第二列......
  • PPT| 《图解CIO工作指南(第4版)》-读书笔记P143
    PPT共143页,由于篇幅有限,以下为部分资料.......