C++ 中的订婚数

2025 年 5 月 20 日 | 阅读 11 分钟

正整数,例如正整数对中具有关于其除数独特关系的条目,被称为配偶数或准亲和数。如果满足以下条件,一对数字 a 和 b 被认为是配偶数:

σ(a) - a - 1 = b

σ(b) - b - 1 = a

σ(n) 是 n 的所有除数(包括 n 本身)的总和。这个数字是其中一个数字的除数总和减一减去它本身等于另一个数字。与亲和数不同,配偶数具有唯一的性质,即除数关系之间的差恰好是 1。

作为一个说明性的例子,我们可以考虑最小的已知配偶数对 (48, 75)。我们首先需要计算 48 的除数之和。48 的除数是 1, 2, 3, ...., 4, 6, 8, 12, 16, 24, 48。将这些加在一起得到:

σ(48) = 1 + 2 + 3 + 4 + 6 + 8 + 12 + 16 + 24 + 48 = 124

现在,从这个总数中减去 48 + 1:

σ(48) - 48 - 1 = 124 - 48 - 1 = 75

之后,我们证明 75 满足反向条件。75 的除数是 1, 3, 5, 15, 25 和 75。将这些加在一起得到:

σ(75) = 1 + 3 + 5 + 15 + 25 + 75 = 124

从这个总数中减去 75 + 1:

σ(75) - 75 - 1 = 124 - 75 - 1 = 48

(48, 75) 是一个配偶对,因为两个条件都满足。配偶数是数字对的一个有趣子集,因为它们存在双向关系,即两个数字在除数总和方面独特地指向彼此。

随着数字变大,配偶数变得越来越稀有。亲和数对比一个数的真除数之和等于另一个数的对要稀有得多。配偶数之所以迷人,是因为它们的稀有性以及数字之间对称且精确的数学关系。

配偶数有许多独特和特殊的特征。这些特性使它们与其他特殊数字不同。它们不仅在变得强大方面有所不同,而且还具有极高的数学优雅性,并且在计算上很难处理。

具有对称性的除数关系

配偶数的特点是它们的除数总和的相互关系。配偶数是一对数字 (a, b),其中 σ(a) - a - 1 = b 且 σ(b) - b - 1 = a 成立。这意味着如果 a 与 b 相关,b 也与 a 相关。这种对称模式在许多数字模式中都会遇到,但在其他任何关系中都很少见。

稀有性和分布

配偶数是数字世界中最稀有的事物之一。配偶数要少得多,并且已被广泛记录,但亲和数更容易找到。例如,(48, 75) 对是最小的已知配偶对,而只有少数其他对,例如 (140, 195) 和 (1050, 1925),是已知的。它们的稀有性为这项研究增添了一丝神秘和挑战。

紧密的数字关系

通常,配偶数的数量级很接近。与可以大小差异很大的亲和数不同,配偶数始终很接近,数字本身与其除数总和之间的差异恰好为一。这种接近性加强了数字“配偶”或比喻性地连接的类比,因为它们的关系不仅是数学上的,而且在数轴上也是空间上紧密的。

与其他特殊数字的联系

配偶数属于一类因与除数的关系而特殊的数字。这个家族包括:

  • 完全数:图的分数部分,我们需要找到等于其真除数之和的数字。例如,如果我们使 6 完全,则 6 = 1+2+3。
  • 亲和数:假设我们的数字有一对数字,其中一个数的真除数之和等于另一个数,例如 (220, 284)。
  • 配偶数:一个数的真除数之和减 1 等于另一个数。

对完全数和亲和数的更普遍方法已被更常见地研究过,但由于其稀有性和计算复杂性,配偶数的研究较少。然而,这些其他特殊数字与其与其他特殊数字的关系有所不同。

计算挑战

计算配偶数是一个难题。对于大数,计算除数之和 σ(n) 需要花费大量时间,因为我们必须找到 n 的所有除数。例如,需要有效的除数和函数来查找新的配偶数对和相关问题,以及优化的算法和技术。但计算能力和算法的进步也使我们能够找到更大的对,并且它们揭示了它们更深层的性质。

数学意义

值得一提的是,对配偶数的考虑提供了关于除数函数行为和随后整数结构的大量信息。由于它们的稀有性,它们为数论研究提供了良好的基础,因为每一个都使我们能够了解数字如何通过可除性相互连接。第三,配偶数揭示了简单的数字模式可能隐藏着非常出乎意料和复杂的层次。

C++ 中识别配偶数的算法

配偶数的评估需要计算一些整数的除数之和,并确定定义配偶数的数字是否满足标准。为了开发此任务的算法,我们必须计算一个数字的除数之和,并检查两个潜在数字的等式。由于除数计算需要一些时间来处理,特别是对于大数,所使用的算法必须检查它如何处理这些除法。

算法步骤

除数和函数:首先是声明两个参数,变量 sum_of_divisors,用于存储数字 n 的除数之和。此函数由于上述循环的优化目的,最多查找 n 的平方根的除数。并且对于 n 的每个除数 i,i 和 n/i 都被加到上述等式中,因为我们可以看到每个除数 i 都整除 n,然后 n 也整除 ni。

例如,对于 n = 48,我们计算:

  • √48 以下的除数是 1、2、3、4、6,大约为 6.93。
  • 较大的除数是 48、24、16、12、8。

所有除数的总和:让我们将以下数字序列相加:1, 2, 3, 4, 6, 8, 12, 16, 24, 48 = 124。

遍历可能的对:遍历给定范围内可以取的所有数字。对于每个 a,计算其除数之和 (σ(a)) 并使用以下公式计算 b:

b = σ(a) - a - 1

之后,确定 b 是否大于 a,以避免重复使用同一对,并证明其用途仅用于配偶数。

验证反向条件:对于候选 b,计算 σ(b) 并检查反向条件是否成立:

σ(b) - b - 1 = a

如果 a 和 b 都为真 (a, b),则根据此条件将它们定义为配偶对。

存储和打印结果:如果找到这样的对有效,则将其添加到列表中或立即打印。

纯文本算法

复杂性和优化技术

识别配偶数在计算方面是困难的,因为为了得到解决方案,我们需要对几个数字求和,并测试它们与类似对应项配对的兼容性。考虑执行此算法所需的迭代次数,并对该算法进行优化,这将对大范围数字有用。

时间复杂度分析

该算法的复杂性可以分为两个主要组成部分:

  1. 除数和计算
    关于计算单个 n 的除数和 σ(n),此类操作意味着枚举所有小于或等于 √n 的可能除数。对于每个除数 i,i 和 n/i 都对总和做出贡献,这是工作中的一个重要点。此过程对于单个数字仅需 O(√n) 的时间复杂度。
  2. 遍历所有数字
    对于从第一个到预定 L 的一组数字,该算法计算每个数字的 σ(n) 并检查配偶数属性。在朴素方案中,由于对范围内的每个数字都需要进行除数计算,因此总时间复杂度约为 O (L * √L)。

大范围的挑战

随着极限 L 的增加,由于两个主要因素,计算成本急剧上升:

  • 随着数字的增加,除数的数量随 √n 增加,这表明随着数字的增加需要更多的计算。
  • 需要减少计算 σ(n) 的次数,因为它对范围内的每个数字都会重复计算。

示例

让我们举一个例子来说明 C++ 中的配偶数。 C++

输出

Enter the lower limit of the range: 1
Enter the upper limit of the range: 1000
Betrothed Numbers between 1 and 1000:
(48, 75)
(140, 195)   

说明

1. 除数和计算

识别配偶数的一个重要部分是确定某个数字的除数之和。程序使用一个名为 sum_of_divisors 的函数,该函数仅迭代到数字的平方根,利用了除数成对出现的数学特性。对于 n 的每个除数 i,程序将 i 和 n/i 的值加到总和中。这消除了循环源,因此与方法相比节省了大量计算时间。此外,它避免了重复,因为如果 i == n/i(其中 i 是 [1,n] 范围内的元素),则不添加任何除数。

例如,48 的除数和计算如下:这些是除数:1, 2, 3, 4, 6, 8, 12, 16, 24, 和 48。这些除数的总和为 124。此函数是算法的基础,因为它被一遍又一遍地应用以检查潜在的配偶对。

查找配偶数

主要的 函数 find_betrothed_numbers 在用户定义的范围 [lower_limit, upper_limit] 内迭代以搜索配偶对。对于范围内的每个数字 a,程序使用以下公式计算候选数字 b:

  • b = σ(a) - a - 1
  • 在这里,σ(a) 等于 'a' 的所有除数之和。然后程序检查 b 是否满足以下条件:
  • b 必须大于 a,以排除重复相同的对。例如,(a, b) 和 (b, a) 是相同的对。
  • 对于变量 b 的值,它必须在一定范围内才能进行分析。
  • 重新排列反向条件,必须是 σ(b) - b - 1 == a。
  • 如果所有这些条件都满足,则将对 (a, b) 定义为配偶对并存储以供输出。

结论

总而言之,配偶数在数论中具有一个非常有趣的概念,它展示了整数对之间的关系。这些对基于除数总和的某些属性,非常稀少,因此代表了一个吸引人的数值搜索问题。所提供的程序通过使用数学属性、优化和高效算法有效地识别此类对。这是因为将“除数和”计算应用于数字的平方根,使得解决方案对于相当长的范围来说非常实用。

通过在程序的各个级别进行检查和验证,可以确保所有配偶对都具有必需的特性,而不会浪费检查或计算。这种方法在用户定义的范围内迭代并系统地验证对,以确保准确性并提高其工作能力。像 (48, 75) 和 (140, 195) 这样的例子被强制执行,以优雅地符合所展示和使用的关系。

除了对配偶数的检查有助于了解与除数相关的性质之外,它还有助于理解优化作为计算数学的主要方法如何在实践中使用。这个主题最适合学术目的、研究或简单的编程练习;鼓励增强好奇心,同时为数论和算法设计提供了大量的学习空间。通过更大的范围或提高效率,用户可以独立创新并扩展配偶对列表。