这题总感觉在哪里见过…
直接搞式子:
2(l+r)(r−l+1)=n(l+r)(r−l+1)=2n设a=(l+r),b=(r−l+1)则ab=2na+b=l+r+r−l+1=2r+1所以a+b为奇数则为合法而不难退出a(或b)的最大上限为2n
(想想判断质数)即遍历一个因数,然后跑一跑判断既珂即:i=1∑2n
i+(i2n)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;
}
某神仙名言:奥利给,式子拆它就完了!