1. 程式人生 > 其它 >1656D - K-good

1656D - K-good

1656D - K-good

n is k-good if and only if

  • $ n \geq 1 + 2 + \ldots + k = \frac{k(k+1)}{2}.$
  • \(n \equiv 1 + 2 + \ldots + k \equiv \frac{k(k+1)}{2} \pmod{k}.\)

It is clear that both conditions are necessary, and it turns out they're sufficient too since $\frac{k(k+1)}{2} + m \cdot k $ is attainable for any integer $ m \geq 0$ by repeatedly adding \(k\)

to one of the terms in the sum $ 1 + 2 + \ldots + k.$

Note that, if \(k\) is even, the second condition is \(n \equiv \frac{k}{2} \pmod{k}\), which is true if and only if \(2n\) is a multiple of k but n is not a multiple of k. So all k which divide \(2n\) but do not divide n satisfy the second condition, and we want the smallest of them in order to have the best chance of satisfying the first condition. The smallest of such \(k\)

is \(k_1 = 2^{\nu_2(n)+1}, i. e\). the smallest power of \(2\) that does not divide n. We can compute \(k_1\) in \(O(\log n)\) (or in \(O(1)\) with some architecture-specific functions) and check if it satisfies the first condition.

If it doesn't, consider \(k_2 = \frac{2n}{k_1}\). Note that \(k_2\)

is odd, and therefore the second condition is satisfied since \(k_2\) is a divisor of n. Since \(k_1\) did not satisfy the condition, we have \(k_1(k_1+1) > 2n \implies k_2 < k_1+1 \implies k_2 \leq k_1-1\) (since \(k_2\) is odd), so:

\[\frac{k_2(k_2+1)}{2} \leq \frac{k_2 \cdot k_1}{2} = n \]

So \(k_2\) satisfies the first condition.

Note that \(k_2\) is only a valid answer if \(k_2 \neq 1\). If \(k_2 = 1\), then we have that n is a power of 2, and in this case there is no answer since all odd candidates of k must be odd divisors of n, of which there is only 1, and the smallest even candidate for k was \(k_1 = 2n\), which does not work. So we have to answer -1.