这场比赛我没打,错失上分好机会
这题是真的水
直接根据题意列出式子:
n
=
k
(
k
−
1
+
2
t
)
2
n=\frac{k(k-1+2t)}{2}
n=2k(k−1+2t) 其中
t
t
t 为正整数
稍微变一下形:
2
n
=
k
(
k
+
1
+
2
s
)
2n=k(k+1+2s)
2n=k(k+1+2s) 其中
s
s
s 为自然数
于是就变成了将 2 n 2n 2n 分为两个奇偶不同的数的乘积,我们只要把 2 n 2n 2n 里所有的 2 2 2 拿出来就行了,然后把两个值取一个最小值就是 k k k 了,其中 k ≠ 1 k\neq1 k=1
于是就有了代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
void solve(){
int n,a,b;
cin>>n;
n*=2;
a=1,b=n;
while(b%2==0)b/=2,a*=2;
if(b==1)cout<<"-1\n";
else cout<<min(a,b)<<"\n";
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin>>t;
while(t--)solve();
}