先上題
5171. 最接近的因數
難度:中等
給你一個整數 num,請你找出同時滿足下面全部要求的兩個整數:
- 兩數乘積等於 num + 1 或 num + 2
- 以絕對差進行度量,兩數大小最接近你可以按任意順序返回這兩個整數。
示例 1:
輸入:num = 8
輸出:[3,3]
解釋:對於 num + 1 = 9,最接近的兩個因數是 3 & 3;對於 num + 2 = 10, 最接近的兩個因數是 2 & 5,因此返回 3 & 3 。
示例 2:
輸入:num = 123
輸出:[5,25]
示例 3:
輸入:num = 999
輸出:[40,25]
提示:
- 1 <= num <= 10^9
解析及答案
Tips
這裏需要注意的是:以後每次遇到需要因子的題目,從目標數N的二次開方遞減,尋找較快。
答案
import math
class Solution:
def closestDivisors(self, num: int) -> List[int]:
sqrt = math.sqrt(num)
for i in range(int(sqrt)+1, 0, -1):
if (num + 1) % i == 0:
return [i, (num + 1) // i]
if (num + 2) % i == 0:
return [i, (num + 2) // i]
return []