177周賽 —數學題(因子的題目到底從哪兒算,複雜度低?)

先上題

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 []
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章