<p>Given an integer <code>num</code>, find the closest two integers in absolute difference whose product equals&nbsp;<code>num + 1</code>&nbsp;or <code>num + 2</code>.</p>

<p>Return the two integers in any order.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> num = 8
<strong>Output:</strong> [3,3]
<strong>Explanation:</strong> For num + 1 = 9, the closest divisors are 3 &amp; 3, for num + 2 = 10, the closest divisors are 2 &amp; 5, hence 3 &amp; 3 is chosen.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> num = 123
<strong>Output:</strong> [5,25]
</pre>

<p><strong class="example">Example 3:</strong></p>

<pre>
<strong>Input:</strong> num = 999
<strong>Output:</strong> [40,25]
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= num &lt;= 10^9</code></li>
</ul>

class Solution:
    def closestDivisors(self, num: int) -> List[int]:
        divisors_1 = find_divisors(num + 1)
        max_diff_divs_1, max_diff_1 = closest_divs(num+1, divisors_1)
        divisors_2 = find_divisors(num + 2)
        
        max_diff_divs_2, max_diff_2 = closest_divs(num+2, divisors_2)
        
        if max_diff_1 < max_diff_2:
            return [max_diff_divs_1[0], max_diff_divs_1[1]]
        return [max_diff_divs_2[0], max_diff_divs_2[1]]


def find_divisors(num: int) -> List[int]:
    divisors = []
    start_int = 1
    while start_int * start_int <= num:
        if num % start_int == 0:
            divisors.append(start_int)
        start_int += 1
    return divisors
        
def closest_divs(num: int, divisors: List[int])->Tuple[int, int]:
    max_divs = None
    max_diff = num
    for div in divisors:
        diff = num // div - div
        if diff < max_diff:
            max_diff = diff
            max_divs = (div, num // div)
    return max_divs, max_diff

233