因子数与因子和、唯一因式分解

题目描述

输入一个正整数N,求出这个数字存在多少个因子,以及因子之和。

输入

存在多组测试数据,每组测试数据输入一个正整数N(1<=N<=10^9)

输出

对于每组测试数据输出一行,包含两个数字,分别是因子数和因子和。

样例输入

12
47
35

样例输出

6 28
2 48
4 48

唯一因式分解公式

n = (p1e1)(p2e2)(p3e3 ) … (pnen )

因子数

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

因子和

sum = (1+p1+p12+…+p1e1)(1+p2+p22+…+p2e2)…(1+p3+p32+…+p3e2

代码(Python)

#唯一因式分解
while True:
	n = int(input())
	
	#计算因式的个数
	#(1+e1)(1+e2)(1+e3)...(1+en)
	def yinzishu(x):
		ans = 1
		for i in range(2, int(x ** 0.5) + 1):
			#计如果一个数是因子可以一直除以这个因数得到e1
			if x % i == 0:
				temp = 0
				while(x % i==0):
					x /= i
					temp += 1
				ans *= temp + 1
		#如果最后一位不是1那么他就是一个素数因子
		if x > 1:
			ans *= 2
		return ans
		
	#计算因式的和
	#(1+p1+p1**2+p1**3+...+p1**e1)(1+p2+p2**2+p2**3+...+p2**e2)
	def yinzihe(x):
		ans = 1
		for i in range(2, int(x ** 0.5) + 1):
			if x % i == 0:
				temp = 1
				while (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)))

你可能感兴趣的:(算法,python,图论)