在Python中寻找因子的因子之和

在Python中寻找因子的因子之和

假设我们有两个整数m和a。现在n = p 1 (a + 1) p 2 (a + 2) *…p m (a + m) ,其中p i 是第i个质数,i > 0。我们需要找到k的值,其中k = n的每个因子的里面的因子的f(x)值之和。这里的f(x)值是n的每个因子的因子的数量。

因此,如果输入为m = 2,a = 1,则输出将为60。

  • 因此,n = 2^2 x 3^3
  • n = 4 x 27
  • n = 108

108的因数是:1, 2, 3, 4, 6, 9, 12, 18, 27, 36, 54, 108

每个因子的f(x)值为:f(1) + f(2) + f(3) + f(4) + f(6) + f(9) + f(12) + f(18) + f(27) + f(36) + f(54) + f(108)

= 1 + 2 + 2 + 4 + 4 + 3 + 5 + 6 + 4 + 9 + 8 + 12

= 60

为了解决这个问题,我们将遵循以下步骤−

  • MOD:= 10^9 + 7
  • 定义函数summ()。它将获取n
    • 返回(n *(n + 1)/ 2)的floor值
  • 定义函数division()。它将获取a、b、mod
    • 如果a mod b与0相同,则
      • 返回a / b的floor值
    • a:= a + mod * division((-a mod b),(mod mod b),b)
    • 返回(a / b)% mod的floor值
  • mat:=一个新列表,其中包含一个值1
  • 当mat的大小<= m + a时,执行以下操作:
    • 在mat的末尾插入(mat的最后一个元素* summ(len(mat)+1))% MOD
  • 返回division(mat[m + a],mat[a],MOD)

示例

让我们看一下以下实现,以获得更好的理解−

MOD = 10**9 + 7
def summ(n):
   return ((n) * (n + 1)) // 2

def division(a, b, mod):
   if a % b == 0:
      return a // b
   a += mod * division((-a) % b, mod % b, b)
   return (a // b) % mod

def solve(m, a):
   mat = [1]
   while len(mat) <= m + a:
      mat.append((mat[-1] * summ(len(mat)+1)) % MOD)
   return division(mat[m + a] , mat[a], MOD)

print(solve(2, 1))

输入

2,1

输出

60

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程