欧拉计划第45题,找到并输出同时是三角形数,五边形数和六边形数的正整数。
#include <stdio.h>
#include <inttypes.h>
int64_t triangle(const int64_t n) {
return n * (n + 1) / 2;
}
int64_t pentagonal(const int64_t n) {
return n * (3 * n - 1 ) / 2;
}
int64_t hexagonal(const int64_t n) {
return n * (2 * n - 1);
}
int binary_search(int64_t (*arr)(const int64_t), const int n, const int x) {
int64_t head = 1;
int64_t tail = n;
int64_t mid;
while (head <= tail) {
mid = (head + tail) >> 1;
if (mid < 0) {
printf("mid < 0\n");
}
if (arr(mid) == x) {
return mid;
}
if (arr(mid) < x) {
head = mid + 1;
}
else {
tail = mid - 1;
}
}
return 0;
}
int main() {
int n = 143;
while (1) {
n++;
int64_t temp = hexagonal(n);
/*if (binary_search(triangle, temp, temp) == 0) {
continue;
}*/
if (binary_search(pentagonal, temp, temp) == 0) {
continue;
}
printf("%"PRId64"\n", temp);
break;
}
return 0;
}