1. 問題描述:
給你兩個正整數 n 和 k 。如果正整數 i 滿足 n % i == 0 ,那麼我們就說正整數 i 是整數 n 的因子。考慮整數 n 的所有因子,將它們 公升序排列 。請你返回第 k 個因子。如果 n 的因子數少於 k ,請你返回 -1
示例 1:
輸入:n = 12, k = 3
輸出:3
解釋:因子列表包括 [1, 2, 3, 4, 6, 12],第 3 個因子是 3
示例 2:
輸入:n = 7, k = 2
輸出:7
解釋:因子列表包括 [1, 7] ,第 2 個因子是 7 。
示例 3:
輸入:n = 4, k = 4
輸出:-1
解釋:因子列表包括 [1, 2, 4] ,只有 3 個因子,所以我們應該返回 -1
示例 4:
輸入:n = 1, k = 1
輸出:1
解釋:因子列表包括 [1] ,第 1 個因子為 1
示例 5:
輸入:n = 1000, k = 3
輸出:4
解釋:因子列表包括 [1, 2, 4, 5, 8, 10, 20, 25, 40, 50, 100, 125, 200, 250, 500, 1000]
2. 思路分析:
第乙個比較容易想到的是一一枚舉1到n這個範圍內的因子,並且在列舉的時候對其計數,發現等於了k那麼返回這個因子即可,第二種做法是官方提供的思路,其中乙個因子是小於等於根號n的,所以我們首先需要乙個迴圈來找出所有小於等於根號n的因子並且進行計數看是否等於了k,假如在這個範圍之內沒有找到,那麼第k個因為可能是大於根號n的那麼使用迴圈進行倒著來進行計算,這樣就可以保持因子的順序了,其實這個思路還是比較好理解的
3. **如下:
class solution:
def kthfactor(self, n: int, k: int) -> int:
count = 0
for i in range(1, n + 1):
if n % i == 0:
count += 1
if k == count: return i
return -1
class solution:
# 只需要遍歷根號n的範圍內的數字即可然後從後面倒數著來計算即可
def kthfactor(self, n: int, k: int) -> int:
factor, count = 1, 0
while factor * factor <= n:
if n % factor == 0:
count += 1
if count == k: return factor
factor += 1
factor -= 1
# 平方的數字只需要計算一次即可
if factor * factor == n: factor -= 1
# 第k個因為可能超過了根號n的所以要倒著計算
while factor > 0:
if n % factor == 0:
count += 1
if count == k: return n // factor
factor -= 1
return -1
1492 n 的第 k 個因子
給你兩個正整數n和k。如果正整數i滿足n i 0,那麼我們就說正整數i是整數n的因子。考慮整數n的所有因子,將它們公升序排列。請你返回第k個因子。如果n的因子數少於k,請你返回 1。示例 1 輸入 n 12,k 3輸出 3解釋 因子列表包括 1,2,3,4,6,12 第 3 個因子是 3 示例 2 ...
1492 n 的第 k 個因子
給你兩個正整數 n 和 k 如果正整數 i 滿足 n i 0 那麼我們就說正整數 i 是整數 n 的因子。考慮整數 n 的所有因子,將它們 公升序排列 請你返回第 k 個因子。如果 n 的因子數少於 k 請你返回 1 1.生成所有存起來,然後判斷,o nlogn 很暴力 2.o n 直接一次迴圈,過...
N5 關於token防止暴力破解的一些問題
token可以作為每次登陸的唯一識別碼,但是有些 在token方面處理不當,導致暴力破解仍然有機可乘。開啟pikachu平台,在token章節,按f12,檢視後台原始碼。用塊選擇器現選擇賬號密碼位置,可以很明顯的找到token。這裡的token是以明碼的方式顯示出來的。雖然每次登入都會跳變一次,但是...