题意:

给定一个素数p(p <= 1e12),问是否存在一对立方差等于p。

分析:

根据平方差公式:

因为p是一个素数, 所以只能拆分成 1*p, 所以 a-b = 1.

然后代入a = b + 1. 求出 3a² + 3a + 1 = p

化简得a(a+1) = (p-1)/3

令(p-1)/3 = T, 问题化为是否存在整数a使得a(a+1) == T, 那么令 t = (int)sqrt(T),只要判定一下t * (t+1) == T ? 即可

另一种做法是打一个a的表(a只要打到1e6), 然后二分查找是否, 主要锻炼一下二分查找的代码实现。

(这题在网络赛时候我是打表找出规律的, 发现符合的数一定是形如1 + 6*(1+2+3...+k)这样的, 以后碰到这种题可以先打表看看有无规律)

代码:

数学方法:

#include <bits/stdc++.h>
using namespace std;
int main(){
int T;
scanf("%d", &T);
while(T--){
double p;
scanf("%lf", &p);
double T = (p-1.0)/;
double a = floor(sqrt(T));
if(a*(a+) == T)
printf("YES\n");
else printf("NO\n");
}
return ;
}

二分查找:

#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#define ll long long using namespace std; const int MAXN = 1e6 + ;
ll tab[MAXN]; void init()
{
for (int i = ;i < MAXN;++i)
tab[i] = 3LL * i*i + * i + ;
} int main()
{
init();
int T;
scanf("%d", &T);
while(T--){
long long p;
scanf("%lld", &p);
int left = , right = MAXN - ;
int mid = (left+right) >> ;
int flag = ;
while(left <= right){
if(p == tab[mid]){
flag = ;
break;
}
else if(p > tab[mid]){
left = mid + ;
}
else right = mid - ;
mid = (left+right) >> ;
}
if(flag)
printf("YES\n");
else printf("NO\n");
}
return ;
}

最新文章

  1. 深入理解JS 执行细节
  2. 【MySQL】mysql workbench
  3. opencv图像操作
  4. C/C+小记
  5. java初始化笔记
  6. HDU 3294 (Manacher) Girls&#39; research
  7. Div 自适应屏幕大小
  8. 自己编写的基于VC++6.0的串口调试软件,并贡献源程序!
  9. delphi7开发webservice部属在apache服务器中 转
  10. 【干货】.NET开发通用组件发布(一) 介绍
  11. 在Redis Sentinel环境下,jedis该如何配置
  12. Exception in thread &quot;main&quot; org.I0Itec.zkclient.exception.ZkAuthFailedException: Authentication failure is thrown while creating kafka topic
  13. 异步加载js的三种方法
  14. 使用docker-compose部署nginx
  15. java之jedis使用
  16. Linux搭建Hadoop集群---Jdk配置
  17. log4net 极简配置
  18. Cube Stacking P0J 1988(加权并查集)
  19. 百家搜索:在站点中加入Google、百度等搜索引擎
  20. Django--登录认证

热门文章

  1. Cloudera Manager是啥?主要是干啥的?
  2. HDFS Java API
  3. B.华华教月月做数学
  4. matplotlib 绘图实例01:正弦余弦曲线
  5. 将picpick汉化及矩形截屏
  6. yum卸载遇到的问题--待解决
  7. spring在非容器管理的类里获取bean
  8. Python调用Java代码部署及初步使用
  9. synchronize早已经没那么笨重
  10. PHP Deprecated: Function split() is deprecated in /var/www/html/cacti/cmd.php on line 61