C++ 斯特拉八面体数

2025 年 2 月 10 日 | 5 分钟阅读

星形八面体数 (Stella Octangula numbers) 是一组具有有趣几何和数论特征的数字。名称 "Stella Octangula" 源于拉丁语,其中 "Stella" 意为 "星","Octangula" 指的是八面体,这是一种有八个面的多面体。这些数字通过应用给定公式生成序列。在数学中,星形八面体数 是一种由星形八面体(形式为 n(2n² - 1) 的形状)构成的具象数。两个同时是完全平方数的星形八面体数是 1(或一)和 9653449。

示例

方法 1

最简单的方法是计算从 0 开始的 n(2n² - 1) 的值,然后将其与给定的数字 x 进行比较。我们将继续增加 n 并重新计算 n(2n² - 1),直到它等于 x,这表示 x 是一个星形八面体数。如果 n 的值大于 x,则 x 不应该是星形八面体数。

示例

让我们举一个例子来说明 C++ 中的 星形八面体数

输出

Yes

说明

  • 在此示例中,StellaOctangula() 函数接受一个整数 key 作为输入,然后检查它是否是星形八面体数。它通过遍历 num 的值并检查表达式 num*(2*num*num - 1) 是否等于 key 值来执行此操作。如果是,它返回 true,表示 key 是一个星形八面体数。
  • main() 函数中,创建了一个 key 变量并赋值为 14。使用此 key 调用 stellaOctangula() 函数。之后,如果函数返回 true,程序显示“Yes”,如果返回 false,则显示“No”。

方法 2

这是检查数字是否为星形八面体的另一种有效方法。该方法从 n=1 开始,在每次迭代中,公式得到一个新值:(2*n)^n^1。当我们替换指数时,我们得到 (2n)^ n^ -1 表达式。这里我们将讨论 X 值及其对应的表达式值 z = 0。

我们尝试在下一步中用 x 替换变量。之后,我们将观察哪个变量是 x。此外,如果条件为真,则使用检查,如果相等,布尔类型返回 true,否则转到二分查找。我们专注于检查 x 和 n^2-1 在 n/2 到 n 列中是否给出 true 或 false 的结果以及相等性。

示例 2

让我们再举一个例子来说明 C++ 中的 星形八面体数

输出

Yes

说明

  • calculateExponent(num): 此函数计算表达式 num * (2 * num * num - 1),这是数字属于星形八面体的必要条件。
  • BinSearch(l, h, key): 此函数使用二分查找算法来查找星形八面体数。它接受下限和上限 (L, H) 以及键值 (target) 作为输入。如果计算出的指数等于键,它就是目标函数。如果为真,则返回 true,如果为假,则返回 false,表明键是一个星形八面体数。否则,它会通过比较计算出的指数和键来更改搜索区域。
  • checkStellNumber(val): 它是核心功能,用于调用测试整数 val 是否是星形八面体数。首先,它处理第一个基本情况,即 val 等于 0(这是一个星形八面体数)。在下一阶段,它通过平方 num 的值来找到二分查找的起始值,直到计算出的根大于 val 的值。最后,它将使用 [num/2, num] 的相等范围和目标值 val 调用 BinSearch 函数,并返回结果。

结论

总之,它将展示解决一个难题的不同方法。第一个算法呈现了一个 n/线性速度的乘法,它增加了一个线性表达式 -n² - n,并导致 (2*n) 与 x 的常规标识进行比较。作者将此初始方法定义为“所有检查方法中最慢的”,它通过解决任务中的所有问题来概念化,这意味着第二个算法需要更多时间。因此,运行时间乘以因子 n 的两次方和 n*(2nˆn-1)/n。因此,在下一个循环中,将两个值与 x 进行比较,这消除了搜索范围的一半。因此,搜索范围缩小了。这就是为什么第二个算法比第一个算法快;输入大小加倍可以轻松获得解决方案。