三角形数、五边形数和六角形数
三角形数、五边形数和六角形数分别由以下公式给出:
三角形数 | Tn=n(n+1)/2 | 1, 3, 6, 10, 15, … |
五边形数 | Pn=n(3n−1)/2 | 1, 5, 12, 22, 35, … |
六边形数 | Hn=n(2n−1) | 1, 6, 15, 28, 45, … |
可以验证,T285 = P165 = H143 = 40755。
找出下一个同时是三角形数、五边形数和六角形数的数。
代码演示
#include <iostream>
using namespace std;
typedef long long int1;
int1 Triangle(int1 n) {
return n * (n + 1) / 2;
}
int1 Pentagonal(int1 n) {
return n * (3 * n - 1) / 2;
}
int1 Hexagonal(int1 n) {
return n * (2 * n - 1);
}
int1 binary_search(int1 (*num)(int1), int1 n, int1 x) {
int1 head = 1, tail = n, mid;
while (head <= tail) {
mid = (head + tail) >> 1;
if (num(mid) == x) return mid;
if (num(mid) < x) head = mid + 1;
else tail = mid - 1;
}
return -1;
}
int main() {
int1 n = 144;
while (binary_search(Pentagonal, 2 * n, Hexagonal(n)) == -1) n += 1;
cout << Hexagonal(n) << endl;
return 0;
}