题目原文:

豆豆还是觉得自己智商太低了,就又去做数学题了。一看到题,他就觉得自己可能真的一点智商都没有。便哭着跑来像 dalao 求教:如果存在正整数 A,B ,满足 A3 - B3 = x ,则称质数 x 为立方数。现在给你一个质数 x ,请判断是不是立方数,如果是请输出 “YES” ,否则输出 “NO” 。

【数据范围】

对于 40% 的数据,如果有解 A 在 10000 以内;

对于 100% 的数据,T≤1000;1≤x≤1012。

【思考】

如果是以下数据范围,怎么做?

对于 100% 的数据,T≤100000;1≤x≤1012。

题目分析:

简单的数学推导:\(P = (a - b)(a^2 + ab + b^2)\),因为p是质数,所以一定是1*p,因为a,b都为正数,所以\(a-b=1 => a=b+1\),带入可得\(p = 3b^2+3b+1\)。

于是可以预处理出\(b^2+b\)的值,每次去二分查找\((p - 1) / 3\)即可。

code

#include<bits/stdc++.h>
using namespace std; typedef long long ll; namespace IO{
inline ll read(){
ll i = 0, f = 1; char ch = getchar();
for(; (ch < '0' || ch > '9') && ch != '-'; ch = getchar());
if(ch == '-') f = -1, ch = getchar();
for(; ch >= '0' && ch <= '9'; ch = getchar()) i = (i << 3) + (i << 1) + (ch - '0');
return i * f;
}
inline void wr(ll x){
if(x < 0) putchar('-'), x = -x;
if(x > 9) wr(x / 10);
putchar(x % 10 + '0');
}
}using namespace IO; const int N = 1e6 + 5;
ll b[N], T; inline void init(){
for(ll i = 1; i <= 1000000; i++) b[i] = i * i + i;
} inline bool query(ll x){
ll l = 1, r = 1000000;
while(l <= r){
ll mid = l + r >> 1;
// cout<<mid<<endl;
if(b[mid] == x) return true;
else if(b[mid] < x) l = mid + 1;
else r = mid - 1;
}
return false;
} int main(){
freopen("h.in", "r", stdin);
T = read();
init();
while(T--){
ll x = read();
if((x - 1) % 3) printf("NO\n");
else if(query((x - 1) / 3)) printf("YES\n");
else printf("NO\n");
}
return 0;
}

最新文章

  1. C#中的?和??的用法
  2. ubuntu 下mysql中文乱码问题解决方案
  3. centos vim配置高亮语法和格式化粘贴
  4. http://blog.csdn.net/yunhua_lee/article/details/52710894
  5. Berkeley 四种产品如何选择?
  6. hdu-5690 All X(快速幂+乘法逆元)
  7. 在IT在系统中使用多租户技术的跨部门和虚拟团队的解决方案为员工提供(草案)
  8. MongoDB基础之十 shared分片
  9. 《程序员的思维修炼:开发认知潜能的九堂课》【PDF】下载
  10. 小白到大神,Python 密集知识点汇总
  11. 为什么ArrayList、LinkedList线程不安全,Vector线程安全
  12. 中国地图(Highmaps)
  13. Hibernate中对象的三种状态及相互转化
  14. 浅谈PHP5中垃圾回收算法
  15. extjs4.0以上添加多行工具栏的方法
  16. opencv实现gamma灰阶检測
  17. js openwindow
  18. 使用Javamail发送邮件Util
  19. 开发基于vue前端框架下的系统的UI自动化,记录总结踩的坑
  20. 《More Effective C++》读书笔记(零)Basic 基础条款

热门文章

  1. Jquery+Ajax+Bootstrap Paginator实现分页的拼接
  2. 洛谷—— P1069 细胞分裂
  3. DC中为什么要用Uniquify?
  4. struts2_7_Action类中方法的动态调用
  5. [Angular] Stagger animation v4.3.3
  6. Linux下设置MySQL不区分大写和小写
  7. CentOS 7 virt-manager 无法连接本地的hypervisor
  8. 【BZOJ 2754】[SCOI2012]喵星球上的点名
  9. iOS开发项目实战——Swift实现ScrollView滚动栏功能
  10. JavaScript中BOOLEAN类型之三种情景代码举例