hdu 6216 二分查找

本文分享了一位萌新参加2017年ACM青岛网络赛的经历,重点介绍了如何使用二分查找解决HDOJ6206问题。文章通过分析题目特点,提出了解决方案,并给出了完整的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hdu 6206 二分查找
2017ACM青岛网络赛……是我作为一个萌新参加的第一场大型的,正规的比赛,最开始我是分配的是hdu6210……当时是全场AC率为0……然而我的队友突然问我这道(hdu6216 )怎么做……队友是大佬
我看了一下,其实这大概就是那天的签到题,整体思路很简单:
1.立方数的范围限制在了100000以下,即long long以内
2.由立方差公式得a^3-b^3=(a-b)*(a^2+ab+b^2),因为p是素数,所以如果p是立方差,则a-b必须等于1,因为a^2+ab+b^2必然大于1
3.二分查找就好啦
                上代码:
#include <bits/stdc++.h>
#define n 1000007
typedef long long LL;
int t,tmp;
LL dif[n];
inline void pre()
{
	for(LL i=1;i<n;i++)
	  dif[i]=3*i*i+3*i+1;//公式,可从a^2+ab+b^2推
}
int main()
{
	pre();
	scanf("%d",&t);
	while(t--)
	{
		LL p;
		scanf("%lld",&p);
		if(std::binary_search(dif,dif+n,p))//STL 二分
		  printf("YES\n");
		else
		  printf("NO\n");
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值