輸入乙個正整數n,求出這個數字存在多少個因子,以及因子之和。
存在多組測試資料,每組測試資料輸入乙個正整數n(1<=n<=10^9)
對於每組測試資料輸出一行,包含兩個數字,分別是因子數和因子和。
124735
6 282 48
4 48
n = (p1因子數e1)(p2
e2)(p3
e3 ) … (pn
en )
cnt = (1+e1)(1+e2)(1+e3)…(1+en)因子和
sum = (1+p1+p12+…+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 ...