【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 + 複數名詞 + 複數動詞 ...
随机推荐
- Hash函数浅谈
Hash函数是指把一个大范围映射到一个小范围.把大范围映射到一个小范围的目的往往是为了节省空间,使得数据容易保存. 除此以外,Hash函数往往应用于查找上.所以,在考虑使用Hash函数之前,需要明白它 ...
- BCryptPasswordEncoder 判断密码是否相同
加密 BCryptPasswordEncoder encode = new BCryptPasswordEncoder(); encode.encode(password); 比较 matches(C ...
- K8s 学习者绝对不能错过的最全知识图谱(内含 58个知识点链接)
作者 | 平名 阿里服务端开发技术专家 导读:Kubernetes 作为云原生时代的“操作系统”,熟悉和使用它是每名用户的必备技能.本篇文章概述了容器服务 Kubernetes 的知识图谱,部分内容参 ...
- Prometheus 一条告警的触发流程、等待时间
Prometheus 一条告警的触发流程.等待时间 报警处理流程如下:1. Prometheus Server监控目标主机上暴露的http接口(这里假设接口A),通过上述Promethes配置的'sc ...
- java8时间处理实例
实例: package com.javaBase.time; import java.time.Clock; import java.time.LocalDate; import java.time. ...
- RandomAccessFile vs FileChannel.open(path);
What kind of FileChannel object does the FileChannel.open(path) method return? Is it still random ac ...
- .Net FrameWork获取配置文件信息
今天在做项目的时候需要到配置文件中读取信息,之前自己并没有操作过,今天算是完成自己的一个心愿.读取配置文件中的信息并不难,大致思路是: 1.载入配置文件,获取配置文件的实例. 2.获取配置文件的节点 ...
- html页面的渲染And<script>位置的影响
周末加班敲代码的时用到了<script>标签,突然想到了一个问题:别的自测项目里面<script>我把他放在了不同位置,这里应该会对代码的执行与渲染后影响吧?于是今天专门进行了 ...
- 经典SQL语句使用方法大全(自留用)
一.基础 1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份 ...
- 彻底搞懂B树、B+树、B*树、R 树
出处:http://blog.csdn.net/v_JULY_v . 第一节.B树.B+树.B*树1.前言: 动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Ba ...