C++ 中的第 N 个礼貌数


礼貌数是指可以表示为 2 个或更多连续正数之和的正数。

礼貌数的序列为

3 5 6 7 9 10 11 12 13 14...

有一个公式可以用来找出第 n 个礼貌数。该公式为 n + log2(n + log2(n))。默认日志的以 e 为底。我们需要使用底数为 2 进行计算。将默认日志结果除以 log(2) 以获得以 e 为底的日志值。

算法

  • 第 n 个礼貌数的算法非常简单。
  • 初始化数字 N。
  • 使用上述公式计算第 n 个礼貌数。
  • 确保在计算第 n 个礼貌数之前将 n 的值增加 1。

实现

以下是使用 C++ 实现上述算法

#include <bits/stdc++.h>
using namespace std;
double getNthPoliteNumber(double n) {
   n += 1;
   return n + (log((n + (log(n) / log(2.0))))) / log(2.0);
}
int main() {
   double n = 10;
   cout << (int)getNthPoliteNumber(n) << endl;
   return 0;
}

输出

如果运行以上代码,将会得到以下结果。

14

更新时间:2021 年 10 月 22 日

浏览 152 次

开启你的 职业生涯

完成课程获得认证

开始
广告