【欧拉计划】45. Triangular, pentagonal, and hexagonal

【思路】不难发现三角形数必然是六边形数,因而我们可以从第 $144$ 项六边形数开始枚举,采用二分找到第一个既是五边形数又是六边形数的整数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<stdio.h>
#include<stdbool.h>
#include<math.h>
bool check(long long l,long long r,long long x)
{
while(l<=r)
{
long long mid=(l+r)>>1,tmp=mid*(mid*3-1);
if(tmp==x)return true;
if(tmp>x)r=mid-1;
else l=mid+1;
}
return false;
}
int main()
{
for(int i=144;;++i)
{
long long x=2LL*i*((i<<1)-1);
if(check(1,sqrt(x),x))
{
printf("%lld",x>>1);
return 0;
}
}
return 0;
}

【欧拉计划】45. Triangular, pentagonal, and hexagonal

https://hensier.github.io/projecteuler/45/

作者

hensier

发布于

2022-05-01

更新于

2023-01-02

许可协议

评论