最簡單的想法是對所有小於這個數的數逐個遍歷取餘是否為0。但是這種方法的複雜度是o(n)的,**如下:
n =
int(
input()
)list1 =
for i in
range(1
,n+1):
if n%i==0:
print
(list1)
做題的時候往往這樣複雜度過高,我們將遍歷變成(1,n**0.5),求前一半的約數,求出來乙個帶上n//i(後一半約數中的乙個),這樣就只用遍歷log2(n)的數,複雜度變為o(log(n))。**如下:
n =
int(
input()
)list1 =
for i in
range(1
,int
(n**
0.5)+1
):if n%i==0:
list2 =
list
(set
(list1)
)#刪除重複的,比如4會計入兩個2
print
(list2)
求解乙個數的所有約數之積
首先我們將這個數化成唯一分解的形式,也就是這樣x p1 a1 p2 a2 pn an,我們定義答案為f x 首先我們定義d x 為x的約數的個數,那麼f x x d x 2 由費馬小定理m為素數a m 1 1 mod m a x a x m 1 mod m 其中m為素數,這樣我們就可以在計算中給冪函...
求乙個數約數的個數
求約數的個數 計算乙個整數的約數個數 輸入格式 輸入乙個整數 輸出格式 輸出一行,為輸入整數的約數的個數 樣例輸入 10 樣例輸出 4ac import math number int raw input count 0 sqrt float math.sqrt number if number s...
乙個數的因子個數 (多種時間複雜度)
typedef long long ll ll factor ll n return ans 只需遍歷 1到sqrt n 原因是若i為約數,則n i也為約數計算 40 的因子個數為 8 分別是 1 2 4 5 8 10 20 40 觀察規律 可發現 1 2 4 5 4 0 sqrt 40 4 0 8...