約數個數定理&約數和定理

一、若是咱們要求一個數的全部因數的個數會怎麼去求呢?網絡

首先想到最簡單的方法就是暴力求解就能夠。固然數據小、或者測試數據少就很簡單就能夠過了。測試

二、若是求一個區間內的數的全部因數的個數呢?或者求一個區間內的數的因數最大的數以及最大的因數(正因數)的個數?spa

這樣的話,數據大一些,組數多一些,可能就要Tle,因此能夠想到用惟一分解定理,可是那是適用於分解成素因數,要怎麼轉化呢?blog

這就須要用到了約數個數定理。class

約數個數定理

對於一個大於1正整數n能夠分解質因數:百度

   

則n的正約數的個數就是   搜索

   遍歷

其中a一、a二、a3…ak是p一、p二、p3,…pk的指數。方法

(在證實上本身自行百度搜索就能夠了。qwq)im

三、若是咱們須要求這個區間內具備最大個數因數的這個數的全部因數之和怎麼辦呢?

由於剛剛是按素因數來分解的,若是隻是加上相應的次方數,確定是不對的,那麼要怎麼解決這個問題呢,當時想了很久,不過腦子笨,採用各類暴力,固然也有成效,不過仍是看看下面這個方法吧。

約數和定理

對於一個大於1正整數n能夠分解質因數:n=p1^a1*p2^a2*p3^a3*…*pk^ak,

則由約數個數定理可知n的正約數有(a₁+1)(a₂+1)(a₃+1)…(ak+1)個,

那麼n的(a₁+1)(a₂+1)(a₃+1)…(ak+1)個正約數的和爲

f(n)=(p1^0+p1^1+p1^2+…p1^a1)(p2^0+p2^1+p2^2+…p2^a2)…(pk^0+pk^1+pk^2+…pk^ak)。

這個公式蠻好理解,可是要怎麼去實現呢?

先把素因子存起來,再把冪指數存起來,最後依次加上,這樣的方法固然能夠,可是總歸比較麻煩。

來看一下這個定理:設正整數n有素因子分解 n =(p1^α1)*(p2^α2)*(p3^α3)* ....... *(pk^αk),那麼

           全部因數和  σ(n)=[(p1^α1)-1 ] /(p1-1) * [(p2^α2)-1 ] / (p2-1) * .....  *[(pk^αk)-1 ]/(pk-1)

那麼在每次遍歷到該因數數,直接算一下累加起來就能夠了。

代碼板子回來再寫QAQ.

參考文獻:百度百科等網絡資料加上本身理解。

相關文章
相關標籤/搜索