D - K-good
分析:
-
推式子+分类讨论+分解因数
n − ( k + 1 ) k / 2 ≡ 0 ( m o d k ) n-(k+1)k/2\equiv 0(mod \ k) n−(k+1)k/2≡0(mod k)因为a[i]>0,所以不是 ( k − 1 ) k / 2 (k-1)k/2 (k−1)k/2
-
可以看出要分两类:
- k为奇数:则k为n的因数
- k为偶数:则 k 2 \frac{k}{2} 2k为n的因数
#include <bits/stdc++.h>
#define int long long
#define Pa pair<int,int>
#define yes cout<<"YES\n";
#define no cout<<"NO\n";
using namespace std;
const int N=1e5+5;
void solve()
{
int n;
cin>>n;
int k=n;
while(k%2==0) k/=2;
// k取奇数
if(k!=1 && k<=2e9 && k*(k+1)/2<=n) { cout<<k<<"\n"; return; }
// k取偶数
k=n/k;
if(k<=1e9 && k*(2*k+1)<=n) {cout<<2*k<<"\n"; return; }
cout<<"-1\n";
}
signed main()
{
int T=1;
cin>>T;
while(T--) solve();
}