题目链接
https://www.lydsy.com/JudgeOnline/problem.php?id=1429
题解
题目相当于求
x
2
+
x
+
y
2
+
y
+
z
2
+
z
+
w
2
+
w
=
2
N
x^2+x+y^2+y+z^2+z+w^2+w=2N
x2+x+y2+y+z2+z+w2+w=2N
即
(*)
(
2
x
+
1
)
2
+
(
2
y
+
1
)
2
+
(
2
z
+
1
)
2
+
(
2
w
+
1
)
2
=
4
(
2
N
+
1
)
(2x+1)^2+(2y+1)^2+(2z+1)^2+(2w+1)^2=4(2N+1) \tag{*}
(2x+1)2+(2y+1)2+(2z+1)2+(2w+1)2=4(2N+1)(*)
设
S
(
i
)
S(i)
S(i)表示
i
i
i能拆成多少个由4个数的平方组成的和,
d
(
i
)
d(i)
d(i)表示
i
i
i的约数和,由雅可比的四方定理(证明:arXiv:math/9206203),得到:
S
(
n
)
=
S
(
2
k
m
)
=
{
8
d
(
m
)
k
=
0
24
d
(
m
)
k
≥
1
S(n)=S(2^km)= \begin{cases} 8d(m) & k=0\\ 24d(m) & k\geq 1 \end{cases}
S(n)=S(2km)={8d(m)24d(m)k=0k≥1
其中
n
=
2
k
m
n=2^k m
n=2km,
m
m
m为奇数。
而
(
∗
)
(*)
(∗)式的解的个数可以表示成
x
2
+
y
2
+
z
2
+
w
2
=
4
(
2
N
+
1
)
x^2+y^2+z^2+w^2=4(2N+1)
x2+y2+z2+w2=4(2N+1)的解的个数减去
(
2
x
)
2
+
(
2
y
)
2
+
(
2
z
)
2
+
(
2
w
)
2
=
4
(
2
N
+
1
)
(2x)^2+(2y)^2+(2z)^2+(2w)^2=4(2N+1)
(2x)2+(2y)2+(2z)2+(2w)2=4(2N+1)的解的个数并除去奇偶性和正负号的影响,即
S
(
4
(
2
N
+
1
)
)
−
S
(
2
N
+
1
)
16
=
d
(
2
N
+
1
)
\frac{S(4(2N+1))-S(2N+1)}{16}=d(2N+1)
16S(4(2N+1))−S(2N+1)=d(2N+1)
O
(
n
)
O(\sqrt{n})
O(n)求
d
(
2
N
+
1
)
d(2N+1)
d(2N+1)即可。
代码
#include <cstdio>
long long n,ans;
int main()
{
scanf("%lld",&n);
n=n*2+1;
for(long long i=1; i*i<=n; ++i)
{
if(n%i==0)
{
ans+=i;
if(i*i<n)
{
ans+=n/i;
}
}
}
printf("%lld\n",ans);
return 0;
}