vector<ll> calc_devisors(ll a){
vector<ll> ret;
for(ll i=1; i*i<=a; i++){
if(a%i!=0) continue;
ret.push_back(i);
ll another = a/i;
if(i!=another) ret.push_back(another);
}
sort(ALL(ret), greater<ll>());
return ret;
}
inline long long super_mod(long long a, long long m) {
return (a % m + m) % m;
}
long long extGcd(long long a, long long b, long long &p, long long &q) {
if (b == 0) { p = 1; q = 0; return a; }
long long d = extGcd(b, a%b, q, p);
q -= a/b * p;
return d;
}
PII ChineseRem(long long b1, long long m1, long long b2, long long m2) {
long long p, q;
long long d = extGcd(m1, m2, p, q);
if ((b2 - b1) % d != 0) return make_pair(0, -1);
long long m = m1 * (m2/d);
long long tmp = (b2 - b1) / d * p % (m2/d);
long long r = super_mod(b1 + m1 * tmp, m);
return make_pair(r, m);
}
int main(){
cin.tie(0);
ios::sync_with_stdio(false);
ll N;
cin>>N;
auto Y = calc_devisors(2*N);
ll mi=inf;
for(ll a : Y){
ll b = 2*N/a;
auto pa = ChineseRem(0,a,-1,b);
if(pa.first==0)continue;
ll k = pa.first;
ll m = pa.second;
chmin(mi,k);
}
p(mi);
return 0;
}
追記