Problem:
Score : 600 points

Problem Statement

Given is an integer N.
Find the minimum possible positive integer k such that (1+2+\cdots+k) is a multiple of N.
It can be proved that such a positive integer k always exists.

Constraints

1 \leq N \leq 10^{15}

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N

Output

Print the answer in a line.

Sample Input 1

11

Sample Output 1

10

1+2+\cdots+10=55 holds and 55 is indeed a multple of N=11.
There are no positive integers k \leq 9 that satisfy the condition, so the answer is k = 10.

Sample Input 2

20200920

Sample Output 2

1100144

Solution in Ruby (2.7.1) (judge verdict: Wrong Answer)

require 'prime'

def prime_division(x)
  res = []

  Prime.each(10_000_000) do |e|
    next if x % e != 0

    cnt = 0

    while x % e == 0
      cnt += 1
      x /= e
    end

    res << [e, cnt]
  end

  res
end

def extgcd(a, b)
  if b.zero?
    [1, 0, a]
  else
    x, y, d = extgcd(b, a % b)

    [y, x - (a / b) * y, d]
  end
end

N = gets.to_i

if N.prime?
  if N == 2
    puts 3
  elsif N == 1
    puts 1
  else
    puts N - 1
  end
else
  primes = prime_division(2 * N)
  # primes = (2 * N).prime_division
  values = primes.map { |e, cnt| e ** cnt }
  cnt = primes.size
  ans = Float::INFINITY
  min_val = Float::INFINITY

  if primes.size == 1
    puts 2 * N - 1
    exit
  end

  (1 << cnt).times do |mask|
    a = 1
    b = 1

    cnt.times do |i|
      if mask[i] == 0
        a *= values[i]
      else
        b *= values[i]
      end
    end

    next if min_val < a
    next if min_val < b

    x, y, _ = extgcd(a, b)
    v1 = a * x.abs
    v2 = b * y.abs
    s = v1 * v2

    if s > 0 && min_val > s
      min_val = s
      ans = v1
      ans = v2 if v1 > v2
    end
  end

  puts ans
end