因子數與因子和 唯一因式分解

2021-10-04 18:46:25 字數 1614 閱讀 7345

輸入乙個正整數n,求出這個數字存在多少個因子,以及因子之和。

存在多組測試資料,每組測試資料輸入乙個正整數n(1<=n<=10^9)

對於每組測試資料輸出一行,包含兩個數字,分別是因子數和因子和。

12

4735

6 28

2 48

4 48

n = (p1

e1)(p2

e2)(p3

e3 ) … (pn

en )

因子數

cnt = (1+e1)(1+e2)(1+e3)…(1+en)

因子和

sum = (1+p1+p1

2+…+p1

e1)(1+p2+p2

2+…+p2

e2)…(1+p3+p3

2+…+p3

e2)

#唯一因式分解

while

true

: n =

int(

input()

)#計算因式的個數

#(1+e1)(1+e2)(1+e3)...(1+en)

defyinzishu

(x):

ans =

1for i in

range(2

,int

(x **

0.5)+1

):#計如果乙個數是因子可以一直除以這個因數得到e1

if x % i ==0:

temp =

0while

(x % i==0)

: x /= i

temp +=

1 ans *= temp +

1#如果最後一位不是1那麼他就是乙個素數因子

if x >1:

ans *=

2return ans

#計算因式的和

#(1+p1+p1**2+p1**3+...+p1**e1)(1+p2+p2**2+p2**3+...+p2**e2)

defyinzihe

(x):

ans =

1for i in

range(2

,int

(x **

0.5)+1

):if x % i ==0:

temp =

1while

(x % i ==0)

: x /= i

temp *= i

ans *=

(temp *i -1)

/(i-1)

#此處是等比數列公式

#如果最後一位不是1那麼他就是乙個素數因子

if x >1:

ans *=(1

+x)return ans

print

(yinzishu(n)

,int

(yinzihe(n)

))

因式分解與完美數

1.1怎樣因式分解?求出小於該數的所有質數,看是不是可以被該數整除,從而完成因式分解。ps 再求n的所有質數時用sqrt 函式,只需要迴圈嘗試 sqrt n 的數就行,減少迴圈次數 另外,每找到乙個因子i,要把n變成n i,以保證繼續找下乙個因子,正確分解。2.1.何為完美數?如果有一數n,其真因數...

階乘因式分解 求階乘後某因子個數

給定兩個數m,n 求m 分解質因數後因子n的個數。這道題涉及到了大數問題,如果相乘直接求的話會超出資料型別的範圍。下面給出一種效率比較高的演算法,我們一步一步來。m 1 2 3 m 2 m 1 m 可以表示成所有和n倍數有關的乘積再乘以其他和n沒有關係的 n 2n 3n kn ohter other...

數論整理之唯一質因子分解方程

唯一質因子分解方程 每個大於1的自然數均可寫為質數的積,而且這些素因子按大小排列之後,寫法僅有一種方式。標稱 include include include using namespace std const int maxn 65540 int a maxn int main for int i ...