Java 中的 Zumkeller 数2025年4月10日 | 阅读 12 分钟 如果一个数 N 的所有因子可以被分成两个集合,使得第一个集合中因子的和等于第二个集合中因子的和,则称 N 为 Zumkeller 数。这两个集合都必须是非空集。让我们通过几个例子来理解一下。输入时会给出数字 N。 示例 1输入: N = 84 输出: 是,84 是一个 Zumkeller 数。 解释: 84 的因子是:1, 2, 3, 4, 6, 7, 12, 14, 21, 28, 42, 84。现在,如果我们把这些因子分成两个集合,如下所示,我们得到: (28, 84) 和 (1, 2, 3, 4, 6, 7, 12, 14, 21, 42)。现在,第一个集合元素的和为 28 + 84 = 112 第二个集合元素的和为: 1 + 2 + 3 + 4 + 6 + 7 + 12 + 14 + 21 + 42 = 112。由于这两个集合元素的和相等,所以数字 84 是一个 Zumkeller 数。 示例 2输入: N = 108 输出: 是,108 是一个 Zumkeller 数。 解释: 108 的因子是:1, 2, 3, 4, 6, 9, 12, 18, 27, 36, 54, 108。现在,如果我们把这些因子分成两个集合,如下所示,我们得到: (2, 3, 27, 108) 和 (1, 4, 6, 9, 12, 18, 36, 54)。现在,第一个集合元素的和为 2 + 3 + 27 + 108 = 140 第二个集合元素的和为: 1 + 4 + 6 + 9 + 12 + 18 + 36 + 54 = 140。由于这两个集合元素的和相等,所以数字 108 是一个 Zumkeller 数。 示例 3输入: N = 200 输出: 否,200 不是一个 Zumkeller 数。 解释: 200 的因子是:1, 2, 4, 5, 8, 10, 20, 25, 40, 50, 100, 200。现在,如果我们把这些因子分成任何两个集合,我们都无法找到一对集合,使其元素的和相等。因此,200 不是一个 Zumkeller 数。 朴素方法方法很简单。首先,我们将找到数字 N 的所有因子并将其存储在一个数组中。同时,计算数组中元素的总和并将其存储在一个名为 totalSum 的变量中。然后,我们将计算所有可能的集合,并将它们存储在二维数组中。迭代二维数组,并在每次迭代中逐个计算集合的总和。我们将其存储在一个名为 setSum 的变量中。然后,用 totalSum 减去 setSum,得到的差值如果与 setSum 匹配,则数字 N 是 Zumkeller 数。如果不匹配,请对其他迭代重复上述过程。如果所有迭代都已完成,并且没有一次迭代得到 totalSum - setSum 等于 setSum 的值,那么我们可以说 N 不是 Zumkeller 数。 文件名: ZumkellerNaive.java 输出 Yes, 84 is a Zumkeller number. Yes, 108 is a Zumkeller number. No, 200 is not a Zumkeller number. 复杂度分析: 上述程序使用了递归,使得程序的 time complexity 是指数级的,即 O(2f),space complexity 也是指数级的,即 O(f * 2f),其中 f 是输入数字 n 的总因子数。 上述程序的 space 和 time complexities 都非常高,不适用于因子数量很多的数字。对于这类数字,可能会出现 time limit exceeded 或 memory limit exceeded。因此,需要进行一些优化。 方法:使用动态规划我们可以通过动态规划做得更好。观察使用动态规划解决问题的步骤。 步骤 1: 首先,检查数字 N 的因子之和是否为偶数。如果和不是偶数,我们可以得出该数字不是 Zumkeller 数。 步骤 2: 声明一个大小为 (sumofFactors / 2) + 1 * (size + 1) 的二维数组 dp[][],其中 size 是因子的总数。 步骤 3: 运行一个 for 循环,从 0 <= j <= size,并将 dp[0][j] 设置为 true。因为零和总是可行的。 步骤 4: 使用 for 循环,从 1 <= j <= sumofFactors / 2,并将 dp[j][0] 设置为零,因为任何和为零的组合都是不可能的。 步骤 5: 运行一个嵌套 for 循环,从 1 <= k <= sumofFactors / 2 和 1 <= k <= size,并将 dp[j][k] 设置为 dp[j][k - 1] 步骤 6: 如果 j 大于或等于 arr[k-1],并且 dp[j - arr[k - 1]][k - 1] 为 true,则将 dp[j][k] 赋值为 true。 现在,让我们来实现上述步骤。 文件名: ZumkellerDP.java 输出 Yes, 84 is a Zumkeller number. Yes, 108 is a Zumkeller number. No, 200 is not a Zumkeller number. 复杂度分析: 该程序使用了嵌套的 for 循环。外层循环运行 sumOfFactors / 2 次,内层循环从 1 运行到 size 次。因此,程序的 time complexity 为 O(size * sumOfFactors)。由于程序中使用了二维数组,space complexity 也为 O(size * sumOfFactors)。 文件名: ZumkellerDP.java 输出 Yes, 84 is a Zumkeller number. Yes, 108 is a Zumkeller number. No, 200 is not a Zumkeller number. 复杂度分析: 该程序的 time complexity 与前一个程序相同。该程序的 space complexity 为 O(sumOfFactor),其中 sumOfFactor 是输入数字 n 的因子总和。 在范围内查找 Zumkeller 数以下程序说明了如何查找范围内的 Zumkeller 数。 文件名: ZumkellerNumbersRange.java 输出 Zumkeller Numbers from 1 to 100 are: 6 12 20 24 28 30 40 42 48 54 56 60 66 70 78 80 84 88 90 96 下一个主题Java 中的布局管理器 |
Sylvester 序列是一个数学序列,其中每一项都源自所有之前项的乘积加一。它以 2 开始,后续项迅速增长。该序列在数论和组合学中有应用。在 Java 中实现它涉及递归或迭代…
阅读 8 分钟
java.nio.charset 包含一个内置方法 averageBytesPerChar()。CharsetEncoder 返回为每个输入字符生成的平均字节数。对于给定的输入序列,启发式值用于确定所需的输出缓冲区大小……
阅读 2 分钟
在 Web 世界中,会话是指任何两个系统相互交互的时间长度。这两个系统可以彼此建立点对点或客户端-服务器关系。然而,问题在于,在 HTTP 协议中,状态的...
阅读 6 分钟
java.util.function 包首次发布于 Java 8,其中包含 LongConsumer 接口,该接口用于在 Java 中进行函数式编程。它是接受单个 long 值参数但不输出任何内容的函数的一个示例。LongConsumer 类型对象...
阅读 3 分钟
Java 编程语言于 20 世纪 90 年代初由 Sun Microsystem 开发。Java 是一种面向对象、简单、高效、健壮的通用编程语言。它主要用于基于 Web 的企业应用程序。最初它被设计用于在不同平台上运行的嵌入式网络应用程序。当我们...
阅读 3 分钟
Java 编程语言允许我们创建不同类型的应用程序,如窗口应用程序或 Web 应用程序。用户界面是在开发应用程序时的一个重要因素。Java 应用程序的 GUI 可以使用 Java 编程中可用的不同颜色进行交互。Java 的图形...
5 分钟阅读
编辑距离问题是算法和数据结构领域的另一个经典问题,也称为 Levenshtein 距离问题。它确定了将一个字符串转换为另一个字符串所需的最少操作次数。出现在拼写检查器、DNA 序列等情况中...
5 分钟阅读
Java 提供了两个非常强大的库来处理 JSON 数据,即 JACKSON 和 Gson 库。我们经常需要将 JSON 响应转换为 map 以便轻松处理返回的 JSON 数据。我们可以轻松地将 JSON 数据转换为 map,因为 JSON 格式...
7 分钟阅读
在 Java 中,转换运算符()用于将一种数据类型显式转换为另一种数据类型,这个过程称为类型转换。它在处理不同数据类型的元素时提供了灵活性,能够实现精确的数据转换和更灵活的操作。语法必需的数据类型 = (目标类型)变量名 在此处,目标类型...
5 分钟阅读
通过交换行来排列二进制网格,使其交换次数最少,这是一个令人兴奋的问题,它需要将给定的二进制网格转换为特定形式。目标是确保网格中的每行 i 都至少...
阅读 31 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India