思路:
我们可以想象成一段连续的数字,肯定是满足题意的,然后它这个数组一定是等差关系。假设为k,那么这一段数字的和
因为n*2是一个偶数,所以k和(m*2+k-1)肯定是一奇一偶,为了解出k,我们可以将n*2一直除2,知道为奇数,那么最后出现了两个值,一个是k,一个是(m*2+k-1),取min那个就是k,我们需要的答案。
AC代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
void solve(){
int n;
cin>>n;
n*=2;
int ans=1;
while(n%2==0){
n/=2;
ans*=2;
}
if(n==1){
cout<<"-1\n";
}
else {
cout<<min(n,ans)<<"\n";
}
}
signed main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int t=1;
cin>>t;
while(t--){
solve();
}
}