中心八边形数


问题陈述包括打印某个正整数 N 的第 N 个中心八边形数,该数将由用户给出。

中心八边形数是一种可以用图形表示的数。每个中心八边形数都可以表示为中心的一个点,周围环绕着八边形的连续层。八边形是一种几何多边形,它有 8 条边。八边形的连续层意味着围绕中心点的第一层将是一个八边形,第二层将是一个 16 边形,然后是一个 24 边形,依此类推。

由于中心八边形数是一种图形数,让我们借助下面的图形来理解这些数。

第一个中心八边形数只是一个中心点。因此,这个数是 1。

下一个中心八边形数表示为中心的一个点,周围环绕着一层八边形。因此,这个数变为 1+8=9。

下一个中心八边形数以图形的形式表示为中心的一个点,周围环绕着八边形(8 边形)和 16 边形的 2 个连续层。因此,第三个中心八边形数是 1+8+16=25。

类似地,中心八边形数序列中的下一个数以图形表示。遵循图形的模式,我们可以计算中心八边形数序列中的数。中心八边形数序列中的前几个数是1, 9, 25, 49, 81, 121, 169, 225, 289……

在这个问题中,我们将得到任何正整数,即 N。我们的任务是打印参考 N 的中心八边形数的值,即第 N 个中心八边形数。

示例 -

INPUT : N= 4
OUTPUT : 49

解释 - 给定的 N 值为 4。参考 N 的中心八边形数,即第 4 个中心八边形数为 49,它可以表示为中心的一个点,周围环绕着 (N-1) 个连续的八边形层。八边形的 3 个连续层是 8、16、24。因此,这个数是 1+8+16+24=49。

INPUT : N=7
OUTPUT : 169

解释 - 对应于 N 的输入值的中心八边形数的值为 169,它表示为中心的一个点,周围环绕着 (N-1) 个连续的八边形层,即 1+8+16+24+32+40+48=169。

让我们了解使用图形中遵循的模式来计算任何正 N 值的第 N 个中心八边形数的算法。

算法

如果我们观察任何中心八边形数的图形表示中遵循的模式,我们可以得出结论,它是 (N-1) 个连续的八边形层和 1 的总和,其中 N 是第 N 个中心八边形数,而 1 表示中心点。

八边形的连续层是 8, 16, 24, 32, 4…… 由八边形的连续层形成的序列是一个等差数列,其首项为 8(即 a=8),每个项之间的公差也是 8(即 d=8)。

计算首项为 a、公差为 d 的等差数列的 n 项和 -

$$\mathrm{S_n = \frac{n}{2}(2*a+(n − 1)d)}$$

其中,𝑆𝑛 表示等差数列前 n 项的和,a 和 d 分别是等差数列的首项和公差。

我们可以使用这个公式来计算八边形连续层序列前 (N-1) 项的和,因为它也是一个等差数列,以计算第 N 个中心八边形数。

因此,第 N 个中心八边形数可以由下式给出:

$$\mathrm{(中心八边形)_N= (N − 1)个连续八边形层的和 +1}$$

可以通过将值代入上述公式计算等差数列前 n 项的和来计算 (N-1) 个连续八边形层的和。

$$\mathrm{(中心八边形)_N=\frac {N − 1}{2}(2*a+(N − 2)d)+1}$$

a(即首项)的值为 8,d(即公差)的值也为 8,因为序列是 8, 16, 24, 32……

$$\mathrm{(中心八边形)_N=\frac {(N − 1)}{2}(16+(N − 2)*8)+1}$$

此表达式可以进一步简化为:

$$\mathrm{(中心八边形)_N=\frac {8*(N − 1)}{2}(2+N − 2)+1}$$

$$\mathrm{=4N(N − 1)+1}$$

我们将使用我们根据中心八边形数图形表示中遵循的模式导出的表达式来计算我们方法中第 N 个中心八边形数,以解决该问题。

方法

在我们的方法中实现第 N 个中心八边形数公式的步骤如下:

  • 为了计算任何输入值 N 的第 N 个中心八边形数,创建一个函数。

  • 初始化一个名为 ans 的变量来存储第 N 个数的值,这将是我们需要的答案。确保该变量的数据类型为 long long,以便存储较大 N 值的中心八边形数。

  • 使用公式 4𝑁(𝑁 − 1) + 1,我们将计算 N 的中心八边形数并将其存储在 ans 中。

  • 返回变量,这是我们需要的输出。

该方法的 C++ 代码 -

示例

//C++ code to  print the N-th centered octagonal number
//for any positive value of N
#include <bits/stdc++.h>
using namespace std;

//function to calculate the N-th centered octagonal number for given value of N
long long number(int N){

   //long long data type is used to store larger values of N-th number
   long long ans; //to store the N-th centered octagonal number
   ans = 4*N*(N-1)+1; //using the formula 4N(N-1)+1 to calculate the number
   return ans; //return the value stored in ans
}

int main(){
   int N;
   N=14;
   
   //calling the function
   cout<<"The centered octagonal number for N="<<N<<" is "<<number(N)<<endl;   
   N=25;
   cout<<"The centered octagonal number for N="<<N<<" is "<<number(N)<<endl; 

   return 0;
}

输出

The centered octagonal number for N=14 is 729
The centered octagonal number for N=25 is 2401

时间复杂度 - O(1),因为该表达式花费恒定时间来计算第 N 个中心八边形数。

空间复杂度 - O(1),因为我们在解决问题时没有使用任何额外的空间。

结论

本文讨论了中心八边形数的概念及其图形表示中遵循的模式。我们根据每个中心八边形数的图形模式推导出一个表达式,我们在方法中使用该表达式以在 C++ 中以恒定时间和空间解决上述问题。

我希望在阅读本文后,您已经了解了中心八边形数的所有概念。

更新于:2023年9月27日

183 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告