题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1429
题意:
设
F
(
x
)
=
∑
i
=
1
x
i
F(x)=\sum_{i=1}^{x}{i}
F(x)=∑i=1xi,求不定方程
F
(
x
)
+
F
(
y
)
+
F
(
z
)
+
F
(
w
)
=
N
F(x)+F(y)+F(z)+F(w)=N
F(x)+F(y)+F(z)+F(w)=N的自然数解个数。
0
≤
N
≤
1
0
12
0\le N\le10^{12}
0≤N≤1012。
题解:
设
x
2
+
y
2
+
z
2
+
w
2
=
N
x^2+y^2+z^2+w^2=N
x2+y2+z2+w2=N的自然数解个数为
S
(
n
)
S(n)
S(n),N的约数之和为
d
(
N
)
d(N)
d(N),由雅可比的四平方和定理Jacobi’s four-square theorem可知
S
(
2
k
m
)
=
{
8
d
(
m
)
if
k
=
0
24
d
(
m
)
if
k
>
0
(
m
i
s
o
d
d
)
S(2^km)=\begin{cases} & 8d(m) \text{ if } k=0 \\ & 24d(m) \text{ if } k>0\end{cases}(m\;is\;odd)
S(2km)={8d(m) if k=024d(m) if k>0(misodd)
而本题所求即为
(
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)
(2x+1)2+(2y+1)2+(2z+1)2+(2w+1)2=4(2N+1)的自然数解个数,这等价于
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)算一下即可。
代码:
#include <cstdio>
typedef long long LL;
LL n, ans;
int main()
{
scanf("%lld", &n);
n = (n << 1) + 1;
ans = n + 1;
for(LL i = 3; i <= n / i; ++i)
if(n % i == 0)
{
ans += i;
if(i != n / i)
ans += n / i;
}
printf("%lld\n", ans);
return 0;
}