1.基础知识

定义

定义1.1(高斯整数):$\mathbb{Z}[i]=\{a+bi\mid a,b\in Z\}$(其中$i$为虚数单位,即$i^{2}=-1$)

定义1.2(范数):$N(\alpha)=a^{2}+b^{2}$(其中$\alpha=a+bi\in \Z[i]$),显然$N(\alpha)\in N$

定义1.3(基础运算):$+$和$\times$,运算规则与通常的约定相同($\times$可省略)

定理1.1:$N(\alpha\beta)=N(\alpha)N(\beta)$

定义1.4(整环):集合$X$和定义在$X$上的运算$\oplus$和$\otimes$($\otimes$可省略),满足以下条件:

  • $\oplus$和$\otimes$满足交换律、结合律和分配律
  • 存在零元素$o$,使得$\forall \alpha\in X,o\oplus\alpha=\alpha$
  • 存在幺元素$e\ne o$,使得$\forall \alpha\in X,e\alpha=\alpha$
  • $\forall \alpha\in X$,满足$\exists \beta\in X,\alpha\oplus\beta=o$
  • 若$\alpha\beta=o$,则$\alpha=o$或$\beta=o$

则称$(X,\oplus,\otimes)$构成一个整环

定理1.2:$(\Z[i],+,\times)$构成一个整环

其中零元素$o=0$,幺元素$e=1$(显然两者唯一)

根据第4个条件(显然$\beta$唯一),定义$+$的逆运算$-$,与通常的约定相同

定理1.3:$\forall \alpha\in \Z[i],o\alpha=o$

定理1.4:若$\gamma\ne o$且$\alpha\gamma=\beta\gamma$,则$\alpha=\beta$

定理1.5:$\forall \alpha,\beta\in \mathbb{Z}[i]$且$\alpha\ne o$,$\exists p,r\in \Z[i],\beta=p\alpha+r$且$N(r)\le\frac{N(a)}{2}$

设$\alpha=a+bi$,则$(a+bi)(a-bi)=a^{2}+b^{2}=N(\alpha)$

因此,令$q=\frac{(a-bi)\beta}{N(\alpha)}$,则$q\alpha=\frac{(a+bi)(a-bi)}{N(\alpha)}\beta=\beta$

记$[x]$表示与$x$最接近的整数,显然$|x-[x]|\le \frac{1}{2}$

设$q=a'+b'i$(其中$a',b'\in Q$),取$p=[a']+[b']i\in \mathbb{Z}[i],r=\beta-p\alpha$即可,此时有
$$
 N(r)=N(\beta-p\alpha)=N((q-p)\alpha)=((a'-[a'])^{2}+(b'-[b'])^{2})N(a)\le \frac{N(a)}{2}
$$

定义1.5(单位元素):$\epsilon\in \Z[i]$,满足$\exists\alpha\in \Z[i],\epsilon\alpha=e$,并记$\alpha=\epsilon^{-1}$(显然$\alpha$唯一)

定义1.6(单位元素集合):$\varepsilon=\{\epsilon\mid\epsilon$为单位元素$\}$

定理1.6:$\varepsilon=\{\pm1,\pm i\}$

定义1.7(相伴):$\alpha$与$\beta$相伴当且仅当$\exists\epsilon\in \varepsilon,\epsilon \alpha=\beta$,并记作$\alpha\sim \beta$

定理1.7:相伴关系具有对称性、传递性和自反性

整除

定义1.8(整除):$\alpha$整除$\beta$当且仅当$\exists k\in \Z[i],k\alpha=\beta$,并记作$\alpha\mid \beta$

定理1.8:整除具有传递性和自反性

定理1.9:$\alpha\sim \beta$当且仅当$\alpha\mid \beta$且$\beta\mid \alpha$

定义1.9($\alpha$的约数):$\beta\in \Z[i]$,满足$\beta\mid\alpha$

定义1.10($\alpha$的显然约数):$\beta\in \Z[i]$,满足$\beta\in \varepsilon$或$\alpha\sim\beta$

定理1.10:$\alpha$的显然约数为$\alpha$的约数

定义1.11(不可约数):$\xi\in \Z[i]$,满足$\xi\ne o,\xi\notin \varepsilon$且$\xi$的所有约数都为显然约数

定义1.12(素数):$\xi\in \Z[i]$,满足$\xi\ne o,\xi\notin \varepsilon$且$\forall \alpha,\beta\in X,\xi\mid \alpha\beta$当且仅当$\xi\mid\alpha$或$\xi\mid\beta$

定理1.11:素数为不可约数

假设$\xi$为素数但不为不可约数,由于$\xi\ne o,\xi\not\in \varepsilon$,即有约数$\alpha$满足$\alpha\not\in \varepsilon$且$\xi\not\sim\alpha$

记$\xi=\alpha\beta$,则$\alpha,\beta\mid \xi$,考虑$\beta$的性质:

若$\beta\in\varepsilon$,显然$\xi\sim\alpha$,矛盾

若$\xi\sim \beta$,即$\exists\epsilon\in \varepsilon,\xi=\epsilon\beta=\alpha\beta$,由于$\xi\ne o$,必然有$\beta\ne o$,也即$a=\epsilon\in \varepsilon$,矛盾

综上,即$\beta\not\in \varepsilon$且$\xi\not\sim\beta$

事实上,这一段说明:若$\xi\ne o,\xi\not\in \varepsilon$且$\xi$不为不可约数,则$\xi=\alpha\beta$(其中$\alpha,\beta\not\in \varepsilon$且$\xi\not\sim\alpha,\beta$)

同时,根据定理1.8有$\xi\mid\alpha\beta$,也即$\xi\mid\alpha$或$\xi\mid\beta$

由$\alpha,\beta\mid\xi$,即可得到$\xi\sim\alpha$或$\xi\sim\beta$,矛盾

定义1.13($\alpha$和$\beta$的公约数):$d\in \Z[i]$,满足$d\mid\alpha,\beta$

定义1.14($\alpha$和$\beta$的最大公约数):$\alpha$和$\beta$的公约数$d$,满足$\forall \alpha,\beta$的公约数$d',d'\mid d$,并记$d=\gcd(\alpha,\beta)$

分解

定义1.15($\alpha$的分解):若干个不可约数$\xi_{1},\xi_{2},...,\xi_{k}\in \Z[i]$,使得$\alpha=\xi_{1}\xi_{2}...\xi_{k}$

定理1.12:$\forall \alpha\in \Z[i]$且$\alpha\ne o,\alpha\not\in \varepsilon$,$\alpha$存在分解

记$\sigma(\alpha)$为$\alpha$的约数个数(相伴视作相同),对其按照$\sigma(\alpha)$归纳即可,具体如下——

由于$\alpha\ne o$且$\alpha\not\in\varepsilon$,即$\epsilon$和$\alpha$都为$\alpha$的约数且不相伴,也即$\sigma(\alpha)\ge 2$

若$\sigma(\alpha)=2$,显然等价于$a$为不可约数,取$\xi_{i}=\{\alpha\}$即可

若$\sigma(\alpha)<k$时$\alpha$存在分解,考虑$\sigma(\alpha)=k$时(其中$k\ge 3$):

  由于$k\ge 3$,显然$\alpha$不为不可约数,且由于$\alpha\ne o,\alpha\not\in \varepsilon$,则$\alpha=\beta\gamma$(其中$\beta,\gamma\not\in \varepsilon$且$\alpha\not\sim\beta,\gamma$)

  由于$\beta$的约数都是$\alpha$的约数,但$\alpha$不为$\beta$的约数,即$\sigma(\alpha)>\sigma(\beta)$,同理$\sigma(\alpha)>\sigma(\gamma)$

  根据归纳,即$\beta$和$\gamma$存在分解,将两者分解组合即可

同时,$\sigma(\alpha)$显然有限,即得证

命题1.1:不可约数为素数

命题1.2:$\forall \alpha,\beta\in \Z[i],\gcd(\alpha,\beta)$存在,且$\exists x,y\in \Z[i],x\alpha+ y\beta=\gcd(\alpha,\beta)$

命题1.3:$\forall \alpha\in \Z[i]$且$\alpha\ne o,\alpha\not\in\varepsilon$,$\alpha$的分解唯一(不考虑顺序,且若对应项相伴即相同)

定理1.13:命题1.2成立

若$\alpha=\beta=o$,取$\gcd(\alpha,\beta)=o,x=y=o$即可

若$\alpha=o$或$\beta=o$(不妨假设$\alpha=o$且$\beta\ne o$),取$\gcd(\alpha,\beta)=\beta,x=o,y=e$即可

若$\alpha,\beta\ne o$,记$d=\min_{x,y\in \mathbb{Z}[i],x\alpha+y\beta\ne o}x\alpha+y\beta$($\min$指取$N(d)$最小的,若有多个任取即可)

  设$d=x_{0}\alpha+y_{0}\beta$,取$\gcd(a,b)=d,x=x_{0},y=y_{0}$即可,证明如下——

  取$d'=x_{1}\alpha+y_{1}\beta$且$d'\ne o$,根据定理1.5有$\exists p,r\in \Z[i],d'=pd+r$且$N(r)\le \frac{N(d)}{2}$

  由于$r=(x_{1}-px_{0})\alpha+(y_{1}-py_{0})\beta$,若$r\ne o$与$N(d)$最小性矛盾,即$r=o$,也即$d\mid d'$

  取$x_{1}=1,y_{1}=0$和$x_{1}=0,y_{1}=1$时,则$d'=\alpha$和$\beta$,即有$d\mid\alpha,\beta$

  若$d'$为$\alpha$和$\beta$的公约数,显然$d'\mid d=x_{0}\alpha+y_{0}\beta$

定理1.14:命题1.1,命题1.2和命题1.3两两等价

证明参考《代数数论(第二版)》

由此,即命题1.1和命题1.3也成立

2.功能实现

最大公约数

前面已经说明代数系统$(\mathbb{Z}[i],+,\times)$是唯一分解整环,即最大公约数一定存在

进一步的,我们考虑$\alpha,\beta\in \mathbb{Z}[i]$,如何求$\gcd(\alpha,\beta)$

此时,我们通过辗转相除法计算,假设$\alpha=p\beta+r$(其中$N(r)\le \frac{N(\beta)}{2}$),显然$d\mid\alpha,\beta$和$d\mid \beta,r$是等价的(互相可以推导),因此$\gcd(\alpha,\beta)=\gcd(\beta,r)$,递归下去即可

结束条件为$\beta=o$,此时取$\gcd(\alpha,\beta)=\alpha$显然满足条件($o$整除任何数)

同时由于$N(r)\le \frac{N(\beta)}{2}$,时间复杂度为$o(\log N(\alpha)+N(\beta))$

定理2.1:$\forall \alpha,\beta\in \mathbb{Z}[i]$且$x,y\ne o$,$N(\gcd(\alpha,\beta))=\min_{x,y\in \mathbb{Z}[i],x\alpha+y\beta\ne o}N(x\alpha+y\beta)$

证明参考定理1.13的证明

素数判定

(由于是唯一分解整环,不可约数以下一律称为素数)

为了方便,以下称整数意义下的素数为质数,其中模4余3的质数称为$4k+3$质数,其余的称为非$4k+3$质数(显然只能为2或模4余1)

定理2.2:对于非$4k+3$质数$p$,$\exists x\in Z^{+},p\mid x^{2}+1$

若$p=2$,取$x=1$即可

若$p\equiv 1(mod\ 4)$,则$\prod_{i=1}^{\frac{p-1}{2}}(p-i)\equiv (-1)^{\frac{p-1}{2}}(\frac{p-1}{2}!)=(\frac{p-1}{2}!)(mod\ p)$

取$x=\frac{p-1}{2}!$,即有$x^{2}\equiv (p-1)!\equiv -1(mod\ p)$(威尔逊定理),也即$p\mid x^{2}+1$

考虑$\xi\in \Z[i]$,如何快速判定$\xi$是否是素数

定理2.3:$\xi$为素数当且仅当$N(\xi)$为非$4k+3$质数或$N(\xi)=p^{2}$(其中$p$为$4k+3$质数)

  • 充分性

若$\xi$不为素数,若$\xi=o,\xi\in\varepsilon$即$N(\xi)=0$或1,显然不为上述形式

否则,设$\xi=\alpha\beta$(其中$\alpha,\beta\notin \varepsilon$且$\xi\not\sim\alpha,\beta$),也即有$N(\alpha),N(\beta)\ne 1$且$N(\xi)=N(\alpha)N(\beta)$

若$N(\xi)$为(非$4k+3$)质数,那么$N(\alpha)$和$N(\beta)$中必然有一个1,矛盾

若$N(\xi)=p^{2}$(其中$p$为$4k+3$质数),由于$N(\alpha),N(\beta)\ne 1$,必然是$N(\alpha)=N(\beta)=p$

设$\alpha=a+bi$,则$N(\alpha)=a^{2}+b^{2}=p\equiv 3(mod\ 4)$,而$a^{2},b^{2}\equiv 0,1(mod\ 4)$,显然不存在 

  • 必要性

设素数$\xi=a+bi$,则$(a+bi)(a-bi)=N(\xi)$,也即$\xi=a+bi\mid N(\xi)$

对$N(\xi)$质因数分解,记$N(\xi)=p_{1}p_{2}...p_{k}$(其中$p_{i}$为质数),根据$\xi$为素数即$\exists 1\le i\le k,\xi\mid p_{i}$

不妨假设$\xi\mid p=p_{i}$,即$N(\xi)\mid N(p)=p^{2}$,同时$p\mid N(\xi)$

若$N(\xi)=p$,上面已经说明$N(\xi)$不能为$4k+3$质数,即$N(\xi)$为非$4k+3$质数

若$N(\xi)=p^{2}$,假设$p$为非$4k+3$质数:

  根据定理2.2有$\exists x\in Z^{+},p\mid x^{2}+1=(x+i)(x-i)$

  显然$p\not\mid x\pm i$,即$p$不为素数,显然$\xi\sim p$也不为素数,矛盾

因此$p$为$4k+3$质数,即得证

分解

下面,考虑来分解一个$\alpha\in \Z[i]$且$\alpha\not\ne o,\alpha\not\in \varepsilon$——

先对$N(\alpha)$质因数分解,假设$N(\alpha)=\prod_{i=1}^{k}p_{i}^{a_{i}}$(其中$p_{i}$为质数,且$p_{i}$各不相同)

设分解为$\alpha=\prod_{i=1}^{s}\xi_{i}$,根据前面的素数判定,则$N(\xi_{i})$的形式是确定的——

1.$\forall 1\le i\le k$且$p_{i}$为非$4k+3$质数恰有$a_{i}$个$N(\xi)=p_{i}$

2.$\forall 1\le i\le k$且$p_{i}$为$4k+3$质数,恰有$\frac{a_{i}}{2}$个$N(\xi)=p_{i}^{2}$(这里$a_{i}$一定为偶数)

由此,$\forall 1\le i\le s,N(\xi_{i})$已经确定,不妨枚举所有$\xi$使得$N(\xi)=N(\xi_{i})$且$\xi\mid\alpha$,然后将其除掉,重复此过程即可得到最终的分解

暴力枚举时间复杂度为$o(\sqrt {N(\alpha)})$,并不足够优秀

但事实上,解的数量并不多,即有以下结论——

定理2.4:对于素数$\xi$,方程$a^{2}+b^{2}=N(\xi)$的整数解存在且唯一(不考虑顺序和符号下)

  • 存在性

若$N(\xi)=p^{2}$(其中$p$其$4k+3$质数),取$\xi=p$即可

若$N(\xi)=p$(其中$p$为非$4k+3$质数),设$p$在$\Z[i]$中分解为$\prod_{i=1}^{k}\xi_{i}$,则$p^{2}=\prod_{i=1}^{k}N(\xi_{i})$

由于$\xi_{i}$都是素数,则$N(\xi_{i})\neq 1,p^{2}$,那么必然是$k=2$且$N(\xi_{1})=N(\xi_{2})=p$

设$\xi_{1}=a+bi$,即$N(\xi_{1})=a^{2}+b^{2}=p$

  • 唯一性

若有两组解$(a,b)$和$(c,d)$,即$N(\xi)=a^{2}+b^{2}=c^{2}+d^{2}$(且$a,b,c,d\in Z$)

由于$a^{2}+b^{2}=(a+bi)(a-bi)$,即$a+bi\mid c^{2}+d^{2}=(c+di)(c-di)$

由于$N(a+bi)=N(\xi)$,显然$a+bi$在$(\Z[i],+,\times)$中为素数,即$a+bi\mid c+di$或$a+bi\mid c-di$

不妨假设$a+bi\mid c+di$,设$c+di=\epsilon(a+bi)$,由于$N(a+bi)=N(c+di)$,即$N(\epsilon)=1$,也即$\epsilon\in \varepsilon$,分类讨论即可得到$(a,b)$和$(c,d)$在不考虑顺序和符号下相同

由于$\xi=a+bi$是考虑顺序和符号的,也即至多只有8组,那么只需要找到一组解,即可$o(1)$枚举所有解

若$N(\xi)=p^{2}$(其中$p$为$4k+3$质数),取$\xi=p$即可

若$N(\xi)=p$(其中$p$为非$4k+3$质数),有以下结论——

定理2.5:若$p$为非$4k+3$质数,$z\in Z$满足$z^{2}\equiv -1(mod\ p)$,则$N(\gcd(p,z+i))=p$

根据定理2.4,有$\exists a,b,a^{2}+b^{2}=p$,即$a^{2}+b^{2}\equiv a^{2}-z^{2}b^{2}=(a-zb)(a+zb)\equiv 0(mod\ p)$

由于$p$为质数,即$p\mid a-zb$或$p\mid a+zb$

不妨假设$p\mid a-zb$,设$a-zb=kp$,即$a+bi=(kp+zb)+bi=kp+b(z+i)$

记$d=\gcd(p,z+i)$,显然$d\mid a+bi$,即$N(d)\mid N(a+bi)=p$

同时,由于$a+bi\mid (a+bi)(a-bi)=p$,即$a+bi\mid b(z+i)$

由于$N(a+bi)=p$,即$a+bi$为素数,显然$a+bi\not\mid b$,也即$a+bi\mid z+i$

由于$a+bi\mid p,z+i$,即$a+bi\mid d$,也即$N(a+bi)=p\mid N(d)$

综上,即$N(d)=p$

由此,取$\xi=\gcd(p,z+i)$即可

关于如何求$z$,对$p$分类讨论——

当$p=2$时,显然$z=1$即可

当$p\equiv 1(mod\ 4)$时,由于$(-1)^{\frac{p-1}{2}}\equiv 1(mod\ p)$,即$-1$是模$p$的二次剩余,那么$z$是存在的

关于$z$的具体求法,不断随机$1\le c<p$使得$c^{\frac{p-1}{2}}\equiv -1(mod\ p)$,那么取$z\equiv c^{\frac{p-1}{4}}(mod\ p)$即可

关于随机的复杂度,有以下结论——

定理2.6:在$1\le c<p$中,满足$c^{\frac{p-1}{2}}\equiv -1(mod\ p)$的$c$存在$\frac{p-1}{2}$个

根据费马小定理,有$c^{p-1}\equiv 1(mod\ p)$,即$c^{\frac{p-1}{2}}\equiv \pm1(mod\ p)$

根据欧拉准则,有$c$为模$p$的非二次剩余当且仅当$c^{\frac{p-1}{2}}\equiv -1(mod\ p)$

由于$x^{2}\equiv (p-x)^{2}(mod\ p)$,因此至多只有$\frac{p-1}{2}$个数为二次剩余,也即得证

因此,期望时间复杂度为$o(1)$

综上,这一部分复杂度为$o(\log^{2}N(\alpha))$(对每一个素因子,需要快速幂和求$\gcd$)

由于初始需要对$N(\alpha)$分解,使用Pollard-Rho算法,时间复杂度为$o(N(\alpha)^{\frac{1}{4}})$

  1 #include<bits/stdc++.h>
2 using namespace std;
3 #define ll long long
4 struct Num{
5 ll x,y;
6 Num(){
7 x=y=0;
8 }
9 Num(ll xx,ll yy){
10 x=xx,y=yy;
11 }
12 ll len(){
13 return x*x+y*y;
14 }
15 Num conj(){
16 return Num(x,-y);
17 }
18 Num operator - ()const{
19 return Num(-x,-y);
20 }
21 Num operator + (const Num &k)const{
22 return Num(x+k.x,y+k.y);
23 }
24 Num operator * (const Num &k)const{
25 return Num(x*k.x-y*k.y,x*k.y+y*k.x);
26 }
27 };
28 int p[5]={3,5,7,11,13};
29 vector<ll>v;
30 vector<Num>ans;
31 ll mul(ll x,ll y,ll n){
32 return (__int128)x*y%n;
33 }
34 ll gcd(ll x,ll y){
35 if (!y)return x;
36 return gcd(y,x%y);
37 }
38 ll qpow(ll n,ll m,ll mod){
39 ll s=n,ans=1;
40 while (m){
41 if (m&1)ans=mul(ans,s,mod);
42 s=mul(s,s,mod);
43 m>>=1;
44 }
45 return ans;
46 }
47 ll get_min(ll x,ll y){
48 ll ans=(2*abs(x)/abs(y)+1)/2;
49 if ((x<0)^(y<0))ans=-ans;
50 return ans;
51 }
52 bool check(ll n){
53 if (n==2)return 1;
54 if (n%2==0)return 0;
55 ll m=n-1,k=0;
56 while (m%2==0){
57 k++;
58 m/=2;
59 }
60 for(int i=0;i<5;i++){
61 if (n%p[i]==0)return n==p[i];
62 ll s=qpow(p[i],m,n);
63 for(int j=0;j<k;j++){
64 if ((mul(s,s,n)==1)&&(s!=1)&&(s!=n-1))return 0;
65 s=mul(s,s,n);
66 }
67 if (s>1)return 0;
68 }
69 return 1;
70 }
71 ll get_fac(ll n){
72 ll x=rand()%n,c=rand()%n,y=(mul(x,x,n)+c)%n,z=1,tot=0;
73 while (1){
74 if ((x==y)||(tot%100==0)){
75 if (gcd(z,n)>1)return gcd(z,n);
76 if (x==y)return 1;
77 z=1;
78 }
79 tot++;
80 z=mul(z,(x+n-y)%n,n);
81 if (!z)return gcd((x+n-y)%n,n);
82 x=(mul(x,x,n)+c)%n;
83 y=(mul(y,y,n)+c)%n;
84 y=(mul(y,y,n)+c)%n;
85 }
86 }
87 void decompose(ll n){
88 if (check(n)){
89 v.push_back(n);
90 return;
91 }
92 while (1){
93 ll p=get_fac(n);
94 if (p>1){
95 decompose(p);
96 decompose(n/p);
97 return;
98 }
99 }
100 }
101 pair<Num,Num> divide(Num x,Num y){//若n较大,这里需要使用__int128
102 Num ans=y.conj()*x;
103 ans.x=get_min(ans.x,y.len());
104 ans.y=get_min(ans.y,y.len());
105 return make_pair(ans,x+(-ans*y));
106 }
107 Num gcd(Num x,Num y){
108 if (!y.len())return x;
109 return gcd(y,divide(x,y).second);
110 }
111 Num get_Num(ll k){
112 if (k==2)return Num(1,1);
113 while (1){
114 ll c=rand()%k;
115 if (qpow(c,(k-1)/2,k)==k-1){
116 ll z=qpow(c,(k-1)/4,k);
117 return gcd(Num(k,0),Num(z,1));
118 }
119 }
120 }
121 vector<Num> decompose(Num k){
122 v.clear();
123 decompose(k.len());
124 sort(v.begin(),v.end());
125 vector<Num>ans;
126 ans.clear();
127 for(int i=0,flag=0;i<v.size();i++){
128 if (v[i]%4==3){
129 if (flag){
130 Num p=Num(v[i],0);
131 k=divide(k,p).first;
132 ans.push_back(p);
133 }
134 flag^=1;
135 }
136 else{
137 Num p=get_Num(v[i]);
138 pair<Num,Num>o=divide(k,p);
139 if (o.second.len()){
140 p=p.conj();
141 o=divide(k,p);
142 }
143 k=o.first;
144 ans.push_back(p);
145 }
146 }
147 ans[0]=ans[0]*k;
148 return ans;
149 }
150 int main(){
151 srand(time(0));
152 }

3.题目

题面

记$f(x)=\sum_{\alpha\in \mathbb{Z}[i],N(\alpha)=x^{2}}1$,求$\sum_{i=1}^{N}f(i)^{K}$,答案对$P$取模

$1\le N,K\le 10^{11}$,$10^{8}\le P\le 10^{9}+7$

Subtask1:$N\le 8\times 10^{3}$

Subtask2:$K\ge 15$,$P$为2的幂次

Subtask3:$N\le 2\times 10^{7}$

Subtask4:$N\le 2\times 10^{8}$,$1\le K\le 2$

Subtask5:无特殊限制

Subtask1

关于$f(x)$,我们分别枚举$a$的实部和虚部,也即$\sum_{a,b\in Z,a^{2}+b^{2}=x^{2}}1$

显然$|a|,|b|\le x$,在$[-x,x]$中暴力枚举即可,复杂度为$o(N^{3})$

显然,只需要枚举$a$并判定$b$即可,因此不需要枚举$b$

时间复杂度为$o(N^{2})$,可以通过

Subtask2

定义$g(x)=\sum_{a,b\in Z^{+},a^{2}+b^{2}=x^{2}}1$,显然$f(x)=4g(x)+4$

由于$g(x)\in Z$,因此$4\mid f(x)$,即$2^{2K}\mid f(x)^{K}$,因此$f(x)^{K}\equiv 0(mod\ P)$,答案即为0

时间复杂度为$o(1)$,可以通过

Subtask3

定义3.1(勾股数):$(a,b,c)$,满足$a,b,c\in Z^{+}$且$a^{2}+b^{2}=c^{2}$

关于$g(x)$,即求形如$(a,b,x)$的勾股数对数

定理3.1:若$(a,b,c)$为勾股数,则$\gcd(a,b)=\gcd(a,c)=\gcd(b,c)$

定义3.2(原生勾股数):勾股数$(a,b,c)$,满足$\gcd(a,b)=1$

显然,每一对勾股数$(a,b,c)$都恰存在一对原生勾股数$(\frac{a}{d},\frac{b}{d},\frac{c}{d})$(其中$d=\gcd(a,b)$)

考虑一个整数二元组$(n,m)$,满足$n>m>0,n+m\equiv 1(mod\ 2)$且$\gcd(n,m)=1$,以此构造出以下两对勾股数:$(2nm,n^{2}-m^{2},n^{2}+m^{2})$和$(n^{2}-m^{2},2nm,n^{2}+m^{2})$

定理3.2:由此构造出的勾股数都是原生勾股数,且不重复

记$d=\gcd(2nm,n^{2}-m^{2})=\gcd(2nm,(n+m)(n-m))$,显然左边三项与右边两项两两互素,即$d=1$,也即为原生勾股数

由于$2nm$为偶数且$n^{2}-m^{2}$为奇数,显然两类之间显然不会重复

若$(n_{1},m_{1})$和$(n_{2},m_{2})$所产生的相同,由于是同一类,显然两数的平方和和平方差相同,即两数相同

定理3.3:每一对原生勾股数$(a,b,c)$,都存在一组$(n,m)$构造得到

若$a$和$b$同为偶数,即$\gcd(a,b)\ge 2$,矛盾

若$a$和$b$同为奇数,即$c^{2}\equiv a^{2}+b^{2}\equiv 2(mod\ 4)$,矛盾

不妨假设$a$为偶数且$b$为奇数,即$c^{2}\equiv a^{2}+b^{2}\equiv 1(mod\ 4)$,显然$c$为奇数

设$a=2k$,即$c^{2}-b^{2}=(c-b)(c+b)=4k^{2}$,也即$\frac{c-b}{2}\frac{c+b}{2}=k^{2}$,显然$\frac{c-b}{2},\frac{c+b}{2}\in Z$

记$x=\frac{c-b}{2},y=\frac{c+b}{2},d=\gcd(x,y)$,即$d\mid b=y-x,c=x+y$,也即$\gcd(a,b)=\gcd(b,c)\ge d$,显然$d=1$,即$x$和$y$互素

由于$xy=k^{2}$,即$x$和$y$都为完全平方数,显然取$m=\sqrt{x},n=\sqrt{y}$即可

综上,我们只需要枚举$(n,m)$来得到所有原生勾股数,并再枚举$d$得到所有勾股数

由于$n^{2}+m^{2}=c\le N$,因此$n$和$m$的范围都是$o(\sqrt{N})$的,这一部分复杂度为$o(N)$

关于$d$的枚举,总复杂度恰为勾股数的对数,也即$\sum_{i=1}^{N}g(i)$,约为$10^{8}$

最后,再$o(N\log K)$求出$\sum_{i=1}^{N}(4g(i)+4)^{K}$即可

时间复杂度为$o(\sum_{i=1}^{N}g(i)+N\log K)$,可以通过

Subtask4

考虑从$(\mathbb{Z}[i],+,\times)$的角度来求$f(x)$,问题即求$N(\alpha)=x^{2}$的数字个数

记$g(x)$为满足$N(\alpha)=x^{2}$的$\alpha$的个数(相伴视作相同),显然其中每一个数都可以乘上$\varepsilon$中的数得到4个结果,即$f(x)=4g(x)$,也即$\sum_{i=1}^{N}f(i)^{K}=4^{K}\sum_{i=1}^{n}g(i)^{K}$,不妨仅考虑$\sum_{i=1}^{n}g(i)^{K}$

由于$N(\alpha)$是确定的,$\alpha$的分解$\xi_{1},\xi_{2},...,\xi_{k}$中$N(\xi_{i})$的形式是确定的

显然对于$\alpha,\beta\in \Z[i]$满足$N(\alpha)=N(\beta)=x^{2}$,$\alpha$和$\beta$相伴当且仅当两者的分解相同(不考虑顺序,且若对应项相伴即相同)

换言之,统计$g(x)$可以改为统计有多少种分解方式,且由于$N(\xi_{i})$的形式是确定的,只需要分别统计每一项的方案数即可

根据定理2.4,若$N(\xi_{i})=a^{2}+b^{2}$,解$\xi=\pm a\pm bi$或$\pm b\pm ai$

若$p_{i}=2$或$p_{i}$为$4k+3$质数,先仍然这些解都相伴,因此没有贡献

当$p_{i}\equiv 1(mod\ 4)$时,恰有两种解(不相伴),且由于仅关心与两种解的个数,显然为$a_{i}+1$种

综上,记$x$的质因数分解的结果为$\prod_{i=1}^{k}p_{i}^{a_{i}}$,则$g(x)=\prod_{1\le i\le k,p_{i}\equiv 1(mod\ 4)}(2a_{i}+1)$

预处理$o(N)$筛出每一个数的最小素因子,即可$o(\log x)$求出$x$质因数分解的结果,也即可求出$g(x)$

由于每一个$g(x)$都是独立计算的,且$K$只有两种,通过分块打表优化即可

最后,再$o(N)$求和即可($1\le K\le 2$)

时间复杂度为$o(N+\alpha \log N)$(其中$\alpha$为打表的间隔,取$4\times 10^{5}$即可)

Subtask5

根据$g(x)$的式子,不难得到$g(x)$是积性函数,那么显然$h(x)=g(x)^{K}$也是积性函数

问题即求$h(x)$这个积性函数的前缀和,下面考虑用类似Min25筛的做法——

记素数从小到大依次为$p_{1},p_{2},...$,$\pi_{n}$表示不超过$n$的素数个数,$\min_{n}$为$n$最小的素因子

定义$S=\{i\mid i\le \sqrt{N}\or i=\lfloor\frac{N}{x}\rfloor\}$,$S_{1}(n)=\sum_{p_{i}\le n}h(p_{i})$,$S_{2}(n,m)=\sum_{2\le i\le n,p_{m}<\min_{i}}h(i)$

问题即求$1+S_{2}(N,0)$,有如下转移——
$$
S_{2}(n,m)=\sum_{p_{m}<p_{i}\le \sqrt{n},e\ge 1,p_{i}^{e}\le n}h(p_{i}^{e})(1+S_{2}(\lfloor\frac{n}{p_{i}^{e}}\rfloor,i))+(S_{1}(n)-S_{1}(\max(p_{m},\sqrt{n})))
$$
考虑递归计算$S_{2}(N,0)$,在$\sqrt{n}<p_{m}$时,前者即为0,直接返回后者即可,因此需要继续递归的状态$(n,m)$都满足$n\in S$且$m\le \pi_{\sqrt{n}}$

接下来,考虑$\forall n\in S$预处理出$S_{1}(n)$,即$\sum_{1\le i\le n,i为素数,i\equiv 1(mod\ 4)}1$

定义$S_{r}(n,m)=\sum_{2\le i\le n,i为素数或p_{m}<\min_{i},i\equiv r(mod\ 4)}1$(其中$r\in \{1,3\}$),注意到若$i$不为素数,总有小于等于$\sqrt{N}$的素因子,因此有$S_{1}(n)=3^{K}S_{1}(n,\pi_{\sqrt{n}})+(S_{3}(n,\pi_{\sqrt{n}})+[n\ge 2])$

初始即$S_{r}(n,0)=\begin{cases}\lfloor\frac{n-1}{4}\rfloor&(r=1)\\\lfloor\frac{n+1}{4}\rfloor&(r=3)\end{cases}$,转移考虑从$S_{r}(n,m-1)$转移到$S_{r}(n,m)$,即要删去$\min_{i}=p_{m}$的部分,考虑对$p_{m}$分类讨论——

1.$p_{m}=2$,若$\min_{i}=2$显然$i\not\equiv r(mod\ 4)$,即$S_{r}(n,m)=S_{r}(n,m-1)$

2.$p_{m}\equiv 1(mod\ 4)$,则$S_{r}(n,m)=S_{r}(n,m-1)-(S_{r}(\lfloor\frac{n}{p_{m}}\rfloor,m-1)-S_{r}(p_{m}-1,m-1))$

3.$p_{m}\equiv 3(mod\ 4)$,则$S_{r}(n,m)=S_{r}(n,m-1)-(S_{r\oplus 2}(\lfloor\frac{n}{p_{m}}\rfloor,m-1)-S_{r\oplus 2}(p_{m}-1,m-1))$

关于这两个转移,考虑将$\min_{i}=p_{m}$的$i$除以$p_{m}$,此时范围即$\lfloor\frac{n}{p_{m}}\rfloor$,但根据定义,$S_{r}(\lfloor\frac{n}{p_{m}}\rfloor,m-1)$中还包含素数,后者即去掉这一部分

关于模4的余数,显然乘1后不变、乘3后恰好改变,即该式子

时间复杂度为$o(\frac{N^{\frac{3}{4}}}{\log N})$,可以通过

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 1000005
4 #define ll long long
5 int K,mod,vis[N],P[N],mi[N],h[2][N<<1],H[N<<1];
6 ll n,k;
7 int qpow(int n,ll m){
8 int s=n,ans=1;
9 while (m){
10 if (m&1)ans=1LL*ans*s%mod;
11 s=1LL*s*s%mod;
12 m>>=1;
13 }
14 return ans;
15 }
16 int id(ll k){
17 if (k<=K)return k;
18 return 2*K+1-n/k;
19 }
20 ll get(int k){
21 if (k<=K)return k;
22 return n/(2*K+1-k);
23 }
24 ll sqr(int k){
25 return 1LL*k*k;
26 }
27 int dfs(ll n,int m){
28 if (m){
29 if (n<P[m])return 0;
30 if (n<sqr(P[m]))return (H[id(n)]-H[id(P[m])]+mod)%mod;
31 }
32 int ans=(H[id(n)]-H[id((int)sqrt(n))]+mod)%mod;
33 for(int i=m+1;(i<=P[0])&&(sqr(P[i])<=n);i++){
34 ll s=P[i];
35 for(int e=1;s<=n;e++,s*=P[i]){
36 if (P[i]%4!=1)ans=(ans+(1+dfs(n/s,i)))%mod;
37 else ans=(ans+1LL*mi[2*e+1]*(1+dfs(n/s,i)))%mod;
38 }
39 }
40 return ans;
41 }
42 int main(){
43 for(int i=2;i<N;i++){
44 if (!vis[i])P[++P[0]]=i;
45 for(int j=1;(j<=P[0])&&(i*P[j]<N);j++){
46 vis[i*P[j]]=1;
47 if (i%P[j]==0)break;
48 }
49 }
50 scanf("%lld%lld%d",&n,&k,&mod);
51 for(int i=1;i<N;i++)mi[i]=qpow(i,k);
52 K=(int)sqrt(n);
53 for(int i=1;i<=2*K;i++){
54 h[0][i]=(get(i)-1)/4%mod;
55 h[1][i]=(get(i)+1)/4%mod;
56 }
57 for(int i=1;P[i]<=K;i++){
58 if (P[i]==2)continue;
59 int pp=(P[i]%4==3);
60 for(int j=2*K;(j)&&(sqr(P[i])<=get(j));j--)
61 for(int p=0;p<2;p++)h[p][j]=(h[p][j]-(h[p^pp][id(get(j)/P[i])]-h[p^pp][id(P[i]-1)]+mod)%mod+mod)%mod;
62 }
63 for(int i=1;i<=2*K;i++)H[i]=(1LL*mi[3]*h[0][i]+h[1][i]+(get(i)>=2))%mod;
64 printf("%lld",1LL*mi[4]*(1+dfs(n,0))%mod);
65 }

拓展

定义$f'(x)=\sum_{a\in \mathbb{Z}[i],N(a)=x}1$,考虑如何求$f'(x)$,类似地有以下结论——

将$x$质因数分解,设为$\prod_{i=1}^{k}p_{i}^{a_{i}}$,若$\exists 1\le i\le k,p_{i}\equiv 3(mod\ 4)$且$a_{i}\equiv 1(mod\ 2)$,则答案为0,否则答案与之前相同,即$f'(x)=4\prod_{1\le i\le k,p_{i}\equiv 1(mod\ 4)}(a_{i}+1)$

构造$\chi(x)=\begin{cases}1&x\equiv 1(mod\ 4)\\-1&x\equiv -1(mod\ 4)\\0&x\equiv 0(mod\ 2)\end{cases}$,每一个$p_{i}^{a_{i}}$对答案的贡献,都可以表示为$\sum_{j=0}^{a_{i}}\chi(p_{i}^{j})$(具体验证可分类讨论,这里就省略了)

换言之,即$f'(x)=4\prod_{i=1}^{k}\sum_{j=1}^{a_{i}}\chi(p_{i}^{j})$

考虑$\chi(x)$,不难证明其为(完全)积性函数,将后者展开,即有$f'(x)=4\sum_{d\mid x}\chi(d)$

(另外,当$x=0$时其不满足此式子,此时显然$f'(x)=1$)

考虑这样一个问题:求以$(0,0)$为圆心、$R$为半径的圆内整点数($R\in Z^{+}$)

显然,答案即$\sum_{i=0}^{R^{2}}f'(i)=1+4\sum_{i=1}^{R^{2}}\sum_{j\mid i}\chi(j)=1+4\sum_{i=1}^{R^{2}}\lfloor\frac{R^{2}}{i}\rfloor\chi(i)$

另一方面,每一个整点可以看作“几乎”对应于一个$1\times 1$的小方格,因此可以认为整点数与圆的面积接近,即得到式子$\pi R^{2}\approx 1+4\sum_{i=1}^{R^{2}}\lfloor\frac{R^{2}}{i}\rfloor\chi(i)$

再进一步的估计,即有$\pi\approx 4\sum_{i=1}^{R^{2}}\frac{\chi(i)}{i}=4(1-\frac{1}{3}+\frac{1}{5}-\frac{1}{7}+\frac{1}{9}...)$

(虽然之前的描述并不严谨,但事实上这是正确的)

[loj3069]整点计数的更多相关文章

  1. 2019国家集训队论文《整点计数》命题报告 学习笔记/Min25

    \(2019\)国家集训队论文<整点计数>命题报告 学习笔记/\(Min25\) 补了个大坑 看了看提交记录,发现\(hz\)的\(xdm\)早过了... 前置知识,\(HAOI\)< ...

  2. LOJ3069. 「2019 集训队互测 Day 1」整点计数(min_25筛)

    题目链接 https://loj.ac/problem/3069 题解 复数真神奇. 一句话题意:令 \(f(x)\) 表示以原点 \((0, 0)\) 为圆心,半径为 \(x\) 的圆上的整点数量, ...

  3. 计数排序(counting-sort)——算法导论(9)

    1. 比较排序算法的下界 (1) 比较排序     到目前为止,我们已经介绍了几种能在O(nlgn)时间内排序n个数的算法:归并排序和堆排序达到了最坏情况下的上界:快速排序在平均情况下达到该上界.   ...

  4. Objective-C内存管理之引用计数

    初学者在学习Objective-c的时候,很容易在内存管理这一部分陷入混乱状态,很大一部分原因是没有弄清楚引用计数的原理,搞不明白对象的引用数量,这样就当然无法彻底释放对象的内存了,苹果官方文档在内存 ...

  5. 最小生成树计数 bzoj 1016

    最小生成树计数 (1s 128M) award [问题描述] 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一 ...

  6. swift学习笔记5——其它部分(自动引用计数、错误处理、泛型...)

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  7. [LeetCode] Count and Say 计数和读法

    The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 111221, ...

  8. C++ 引用计数技术及智能指针的简单实现

    一直以来都对智能指针一知半解,看C++Primer中也讲的不够清晰明白(大概是我功力不够吧).最近花了点时间认真看了智能指针,特地来写这篇文章. 1.智能指针是什么 简单来说,智能指针是一个类,它对普 ...

  9. BZOJ 1041: [HAOI2008]圆上的整点

    1041: [HAOI2008]圆上的整点 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3621  Solved: 1605[Submit][Sta ...

随机推荐

  1. 11204备库升级PSU

    某系统PSU为11.2.0.4.190115,备库打补丁20年10月份(31537677)由readme可知:1.要求OPatch要求为11.2.0.3.23或之后的版本.2.非rac环境打补丁需要关 ...

  2. 改头换面为哪般,最像Android的Windows——Win11升级安装体验

    在过完了十一小长假之后,各位打工人.学僧党可期待的不仅仅是新一轮的工作,Windows11也在10月5日悄悄正式发布,正式版已经面向MSDN订阅用户开放下载. 作为微软金牌合作伙伴,本葡萄已在第一时间 ...

  3. .Net Core with 微服务 - 使用 AgileDT 快速实现基于可靠消息的分布式事务

    前面对于分布式事务也讲了好几篇了(可靠消息最终一致性 分布式事务 - TCC 分布式事务 - 2PC.3PC),但是还没有实战过.那么本篇我们就来演示下如何在 .NET 环境下实现一个基于可靠消息的分 ...

  4. SpringBoot入门04-组件扫描ComponetScan

    被扫描的包下面的类如果被下面注解,则被创建加入到IOC中去 @Component:没有明确的角色 @Service:业务层角色 @Repository:持久层角色 @Controller:控制层角色 ...

  5. gin 源码阅读(5) - 灵活的返回值处理

    gin 源码阅读系列文章列表: gin 源码阅读(1) - gin 与 net/http 的关系 gin 源码阅读(2) - http请求是如何流入gin的? gin 源码阅读(3) - gin 路由 ...

  6. 【UE4 C++】碰撞检测与事件绑定

    概念 碰撞对象通道与预设 默认提供碰撞对象类型,如 WorldStatic.WorldDynamic等.允许用户自定义 默认提供碰撞预设,如 NoCollision.BloackAll.Overlap ...

  7. 【c++ Prime 学习笔记】第18章 用于大型程序的工具

    大规模应用程序的特殊要求包括: 在独立开发的子系统之间协同处理错误:异常处理 使用各种库(可能包含独立开发的库)进行协同开发:命名空间 对比较复杂的应用概念建模:多重继承 18.1 异常处理 异常处理 ...

  8. 百度OCR技术博客

    百度OCR工具链使用 百度OCR的API使用总体来说比较容易,主要步骤为:注册云平台并登录,选择服务并创建应用,保存API Key以及Secret Key,选择调用API. 注册登录百度云平台 首先需 ...

  9. Noip模拟72 2021.10.9

    T1 出了个大阴间题 真就以为他出了个大阴间题就没写,打个暴力就跑了 数据范围显然摆明是状压 设$f[sta][0/1]$表示在已经选择的集合$sta$中,$A$的最大值是$A$还是$A+1$ 然后按 ...

  10. 广域网(ppp协议、HDLC协议)

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105028759 学习课程:<2019王道考研计算机网络> 学习目的 ...