https://codeforces.com/contest/1656/problem/D
看n是否是让k个数分别%k的和,输出任意符合的k
构造题
n=(1+k)k/2+mk(m>=0)
2n=(1+k)k+2mk
2n=k(2m+k+1)
k是奇数的话,2m+k+1就是偶数
k是偶数的话,2m+k+1就是奇数
也就是构造把2*n分解成奇数和偶数乘积
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
ll n;
scanf("%lld",&n);
ll te=1;
while(n%2==0)
{
n/=2;
te*=2;
}
if(n==1)//是2的n次方,没法分成奇数和偶数的乘积
printf("-1\n");
else
printf("%lld\n",min(2*te,n));
}
}