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
广告