题意:
解法:
设 等 差 数 列 为 [ l , r ] 设等差数列为[l,r] 设等差数列为[l,r]
n ∗ ( a 1 + a n ) 2 \frac{n*(a_{1}+a_{n})}{2} 2n∗(a1+an)
( r − l + 1 ) ( l + r ) 2 = n \frac{(r-l+1)(l+r)}{2}=n 2(r−l+1)(l+r)=n
( r − l + 1 ) ∗ ( l + r ) = 2 n (r-l+1)*(l+r)=2n (r−l+1)∗(l+r)=2n
枚 举 2 n 的 因 子 : 2 n = x ∗ y 枚举2n的因子:2n=x*y 枚举2n的因子:2n=x∗y
那 么 可 以 列 出 方 程 : 那么可以列出方程: 那么可以列出方程:
l + r = x , r − l + 1 = y l+r=x,r-l+1=y l+r=x,r−l+1=y
两 式 相 加 得 2 r + 1 = x + y 两式相加得2r+1=x+y 两式相加得2r+1=x+y
判 断 x + y 是 否 是 奇 数 即 可 . 判断x+y是否是奇数即可. 判断x+y是否是奇数即可.
同 时 , [ l , r ] 合 法 可 以 推 出 [ − ( l − 1 ) , r ] 也 合 法 同时,[l,r]合法可以推出[-(l-1),r]也合法 同时,[l,r]合法可以推出[−(l−1),r]也合法
所 以 每 找 到 一 组 合 法 的 解 , a n s + = 2 所以每找到一组合法的解,ans+=2 所以每找到一组合法的解,ans+=2
code:
#include<bits/stdc++.h>
typedef long long ll;
#define int long long
using namespace std;
void solve(){
int n;cin>>n;
n*=2;
int ans=0;
for(int i=1;i*i<=n;i++){
if(n%i==0){
int x=i,y=n/i;
if((x+y)%2){
ans+=2;
}
}
}
cout<<ans<<endl;
}
signed main(){
ios::sync_with_stdio(0);
int T=1;
while(T--){
solve();
}
return 0;
}