【HDU6216】 A Cubic number and A Cubic Number 和 广工的加强版
广工版的是杭电版的加强版。
题意:判断一个质数是否是两个整数的立方差 ---- 数学题
题解:
根据立方差公式:\(a^3 - b^3 = (a - b)(a^2 + ab + b^2)\)
且 p 为质数
所以 \((a - b)(a^2 + ab + b^2)\) 其中任意一括号为 1,另一括号则为 p。
经计算检验(这里就不写啦),得 \((a - b) = 1\),\((a^2 + ab + b^2) = p\) 。
因为\((a - b) = 1\),所以两个整数a,b必然是相邻的,且通过计算,1e6的立方减去 999,999的立方已经大于1e12。
因此可以开个保存两个相邻整数的立方差,大小为1e6的数组保存立方差的值,然后用二分搜索该数组就可以。
但是!
广工版的题目 p 的范围是1e15,要使得立方差为1e15得要开到1e7的立方,这样就会爆long long。所以上述方法已经不够用了。
让我们回到 \((a - b) = 1\),\((a^2 + ab + b^2) = p\) 这条式子。
根据前一条式子可以把后面一条式子化成: \(3b^2 + 3b + 1 = p\)
把 b 当作未知量,把 p 当作常数,可把式子堪称一元二次方程了,可以弄出
\(\Delta = 12p - 3\)
然后根据求根公式可以写成:$ b = \frac{-3 \pm \sqrt{12p - 3}}{6}$
所以只需要验证两个条件:
1.\(12p - 3\) 开方后是一个整数
2.\(12p - 3\) 开方后 - 3 能否被 6 整除就可以了(因为b是正整数)
// 杭电原题:http://acm.hdu.edu.cn/showproblem.php?pid=6216
// 广工加强题:https://ac.nowcoder.com/acm/contest/3036/K
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
typedef long long LL;
int T;
LL p, ans[9000006];
void init(){
for(LL i = 2; i <= 9000000; i++){
ans[i - 1] = i * i * i - (i - 1) * (i - 1) * (i - 1);
}
}
bool check(LL p){
double a = sqrt(12 * p - 3);
long long b = sqrt(12 * p - 3);
// printf("a - b:%.16f, b:%lld\n", a - b, b);
if(a - b < 0.000001 &&((b - 3) % 6 == 0) return true;
else return false;
}
int main()
{
// 搜索做法
init();
scanf("%d", &T);
while(T--){
scanf("%lld", &p);
bool ok = false;
int left = 1, right = 1000000;
while(left <= right){
int mid = (left + right) / 2;
if(ans[mid] == p) { ok = true; break; }
else if(p < ans[mid]) right = mid - 1;
else left = mid + 1;
}
if(ok) printf("YES\n");
else printf("NO\n");
}
// 数学解法
scanf("%d", &T);
while(T--){
scanf("%lld", &p);
if(check(p)) printf("YES\n");
else printf("NO\n");
}
printf("i:%d num:%lld\n", 9000000, ans[8999999]);
return 0;
}
【HDU6216】 A Cubic number and A Cubic Number 和 广工的加强版的更多相关文章
- hdu 6216 A Cubic number and A Cubic Number【数学题】
hdu 6216 A Cubic number and A Cubic Number[数学] 题意:判断一个素数是否是两个立方数之差,就是验差分.. 题解:只有相邻两立方数之差才可能,,因为x^3-y ...
- 2017青岛网络赛1011 A Cubic number and A Cubic Number
A Cubic number and A Cubic Number Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 65535/3276 ...
- [Javascript] Use Number() to convert to Number if possilbe
Use map() and Number() to convert to number if possilbe or NaN. var str = ["1","1.23& ...
- Ugly Number,Ugly Number II,Super Ugly Number
一.Ugly Number Write a program to check whether a given number is an ugly number. Ugly numbers are po ...
- leetcode 263. Ugly Number 、264. Ugly Number II 、313. Super Ugly Number 、204. Count Primes
263. Ugly Number 注意:1.小于等于0都不属于丑数 2.while循环的判断不是num >= 0, 而是能被2 .3.5整除,即能被整除才去除这些数 class Solution ...
- leetcode 136. Single Number 、 137. Single Number II 、 260. Single Number III(剑指offer40 数组中只出现一次的数字)
136. Single Number 除了一个数字,其他数字都出现了两遍. 用亦或解决,亦或的特点:1.相同的数结果为0,不同的数结果为1 2.与自己亦或为0,与0亦或为原来的数 class Solu ...
- java.sql.SQLException: Io 异常: Invalid number format for port number
java.sql.SQLException: Io 异常: Invalid number format for port number jdbc数据库链接配置没有写端口号 要检查jdbc的配置 ...
- Io 异常: Invalid number format for port number
报错信息: Caused by: java.sql.SQLException: Io 异常: Invalid number format for port number at oracle.jd ...
- a number of 和the number of用法
a number of 和the number of用法 1. A number of + 複數名詞 + 複數動詞 =some/或a lot of + 複數名詞 + 複數動詞 ...
随机推荐
- protobuf 中import 的使用
目录结构如下: test.proto的文件内容如下: syntax="proto2"; package com.eagle.mohrss; option java_outer_cl ...
- 使用linux/macos 自带的shell实现证书方式的快速登陆
一般登陆机器都是需要使用证书安全登陆到跳板机上然后在跳板机去登陆到各个机器. 我们建立一个统一的文件夹mykey,将登陆的pem证书放上去,然后创建一个空白的文件,vim jump.sh #!/usr ...
- 【linux】【windows】查看你想访问的电脑Ip 和 端口是否 通畅
常用查看IP是否通畅: 使用ping命令 ping 117.173.218.23 既想看IP又想看端口:使用telnet命令 telnet 117.173.218.23 9000 注意格式!!!
- ActiveMQ使用Zookeeper+LevelDb配置Master/Slave集群
前言: 本文介绍的AMQ集群是Master-Slave模式的,官网介绍三种方案: (1)基于共享文件系统的,(2)基于JDBC,(3)基于可复制的LevelDB. 关于三种方式的对比网上已经有很多,本 ...
- Jackson 序列化/反序列化时忽略某属性
https://www.iteye.com/blog/wwwcomy-2397340 博客分类: Spring jacksonread_onlyjsonignore 基于Spring MVC的RES ...
- Delphi - 鼠标上下滚动基础消息事件
Delphi实现对鼠标上下滚动基础消息的截获并处理 前几天有客户提出需求:由于个人PC界面限制,有时候电子图档显示不全,希望通过鼠标上下滚动用来控制电子图档的放大和缩小. 下面通过一个测试Demo来说 ...
- 5G:为人工智能与智能制造赋能
近几年,全球有两大科技领域越来越热:一个是人工智能,另一个是5G.两者都是能够改变时代.改变社会.改变经济的颠覆性技术.目前,我国已经发放了四张5G牌照,5G产业处在爆发前夜的阶段:人工智能方面,业界 ...
- testlink使用方法
1.测试项目管理 创建新项目: 类型设置成:活动的,公开的,才可以进行创建.创建完进入主页. 2.用户管理 注意:一般账号就是角色名,共6个角色,记住账号 ...
- AI-数据标注
目录 素材标注工具 标注可能存在的问题 标注注意事项 如何提高素材标注质量 算力和数据是影响深度学习的两个关键因素.在算力满足的情况下,为了达到更好的效果,我们就需要提供海量优质素材数据给神经 ...
- 第一部分day5 文件操作
#-----文件操作----- 文件操作模式 1."r" 读 2."w" 清空写入 3."a" 追加 4."r+" 读写 ...