洛谷 P6267 [SHOI2002]N的连续数拆分

原题地址

这题总感觉在哪里见过…
直接搞式子:
( l + r ) ( r l + 1 ) 2 = n ( l + r ) ( r l + 1 ) = 2 n a = ( l + r ) , b = ( r l + 1 ) a b = 2 n a + b = l + r + r l + 1 = 2 r + 1 a + b 退 a ( b ) 2 n i = 1 2 n i + ( 2 n i ) m o d 2 = = 1 ( i 2 n ) \frac{(l+r)(r-l+1)}{2}=n\\ (l+r)(r-l+1)=2n\\ 设a=(l+r),b=(r-l+1)\\ 则ab=2n\\ a+b=l+r+r-l+1=2r+1\\ 所以a+b为奇数则为合法\\ 而不难退出a(或b)的最大上限为\sqrt{2n}(想想判断质数)\\ 即遍历一个因数,然后跑一跑判断既珂\\ 即:\\ \sum_{i=1}^{\sqrt{2n}} i+(\frac{2n}{i})mod2==1|(i|2n)
谔谔

# include <bits/stdc++.h>
using namespace std;
long long n;
long long tot;
void solve(void) 
{
	tot=0;
	for(long long i=1;i*i<=2*n;i++) 
	{
		if(2*n%i!=0) continue ;
		long long j=2*n/i;
		if(!((i+j)&1)) continue;
		tot++;
	}
	printf("%lld",tot);
	return ;
}
int main(void) 
{
	scanf("%lld",&n);
	solve();
	return 0;
}

某神仙名言:奥利给,式子拆它就完了!

发布了31 篇原创文章 · 获赞 45 · 访问量 7137

猜你喜欢

转载自blog.csdn.net/woshidalaocxy/article/details/105281495