题目传送门_杭电版

题目传送门_广工版

广工版的是杭电版的加强版。

题意:判断一个质数是否是两个整数的立方差 ---- 数学题

题解:

根据立方差公式:\(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 和 广工的加强版的更多相关文章

  1. hdu 6216 A Cubic number and A Cubic Number【数学题】

    hdu 6216 A Cubic number and A Cubic Number[数学] 题意:判断一个素数是否是两个立方数之差,就是验差分.. 题解:只有相邻两立方数之差才可能,,因为x^3-y ...

  2. 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 ...

  3. [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& ...

  4. 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 ...

  5. 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 ...

  6. leetcode 136. Single Number 、 137. Single Number II 、 260. Single Number III(剑指offer40 数组中只出现一次的数字)

    136. Single Number 除了一个数字,其他数字都出现了两遍. 用亦或解决,亦或的特点:1.相同的数结果为0,不同的数结果为1 2.与自己亦或为0,与0亦或为原来的数 class Solu ...

  7. java.sql.SQLException: Io 异常: Invalid number format for port number

    java.sql.SQLException: Io 异常: Invalid number format for port number   jdbc数据库链接配置没有写端口号 ​ 要检查jdbc的配置 ...

  8. Io 异常: Invalid number format for port number

    报错信息: Caused by: java.sql.SQLException: Io 异常: Invalid number format for port number    at oracle.jd ...

  9. a number of 和the number of用法

    a number of 和the number of用法 1.   A number of + 複數名詞 + 複數動詞           =some/或a lot of + 複數名詞 + 複數動詞 ...

随机推荐

  1. DOM的回流和重绘(重排、重绘)

    什么是DOM回流? 页面渲染时,我们对HTML结构简单的增删查改时,浏览器会对所有的dom进行重新排序,这就i是DOM回流,严重影响浏览器性能 DOM的回流和重绘: **DOM的回流**:当页面中元素 ...

  2. 【ELK】elasticsearch使用bulk 导入批量的数据集文件报错:Validation Failed: 1: no requests added

    执行命令如下: curl -XPOST http://192.168.6.16:9200/my_new_index/user/_bulk?pretty --data-binary @/cjf/es/e ...

  3. c#专业的UVC摄像头深控类库-SharpCamera介绍

    SharpCamera是专业的UVC摄像头深控类库.允许您在C#代码内修改摄像头的高级参数,比如亮度.对比度.清晰度.色调.饱和度.伽玛值.白平衡.逆光对比.增益.缩放.焦点.曝光.光圈.全景.倾斜. ...

  4. NSSM部署.Net Core到 Windows 服务

    NSSM 官网http://www.nssm.cc/,下载地址http://www.nssm.cc/download 简单点理解就是NSSM可以把一些exe程序封装成Windows服务,然后exe程序 ...

  5. laravel在使用Composer安装插件时要求输入授权用户名密码解决办法

    在使用laravel-china源时需要输入密码,坑,换源, 先换腾讯的不行,最后试一下阿里云的可以: composer config -g repo.packagist composer https ...

  6. PIE SDK创建金字塔算法

    1.算法功能简介 为栅格影像建立了金字塔,这些影像便能快速进行显示.除了在屏幕上显示外,金字塔还包含了很多其他信息.如果没有金字塔,那么在显示时就要访问整理栅格数据集,然后进行大量计算来选择哪些栅格像 ...

  7. 北理工机器人队RM视觉组学习参考汇总(持续更新中)

    欢迎大家有意加入北理工机器人队参与到视觉组的工作中.在大家能够正式作为队员参与到视觉组的准备工作之前,北理机器人队需要对各位进行培训.这篇文章主要面向有志于参加机器人队视觉组的同学.同时,欢迎所有对相 ...

  8. html5新增表单控件和表单属性

    表单验证 Invalid事件 : 验证反馈 input.addEventListener('invalid',fn,false) 阻止默认验证:ev.preventDefault() formnova ...

  9. PowerShell:标记“&&”不是此版本中的有效语句分隔符

    将命令行语句中的 && 改为分号 ; 就好了,就是这么简单.

  10. Java 之 JDK1.8之前日期时间类

    一.JDK1.8之前日期时间类 二. java.lang.System类 System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1 ...