BZOJ 1429 方程的解

题目: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} 0N1012

题解:
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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值