複雜度更低的求乙個數的所有約數

2021-10-09 02:48:48 字數 601 閱讀 5697

最簡單的想法是對所有小於這個數的數逐個遍歷取餘是否為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...