hdu 6216 A Cubic number and A Cubic Number
来源:互联网 发布:淘宝怎么修改送货地址 编辑:程序博客网 时间:2024/05/29 09:02
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6216
题意:给出一个素数p,判断它是不是两个数的立方差。
分析:
法一:由立方差公式可知a^3-b^3=(a-b)(a^2+ab+b^2),由于p为素数所以只能是p=1*p;容易得a-b=1,a^2+ab+b^2=p;解方程可得a=(3+sqrt(12p-3))/6;只需判断sqrt(12p-3)、a是否为整数就行了。
法二:由立方差公式解得b(b+1)=(p-1)/3;令b=sqrt((p-1)/3);再判断b(b+1)和(p-1)/3是不是相等就行了。
法三:由法一可知a^3-b^3=a^2+ab+b^2,p=3b^2+3b+1,而p<=10^12,所以估算a一定小于10^6,枚举b的值,并用数组保存结果,每次判断p是不是在数组中。
代码:
///法一#include<iostream>#include<cmath>using namespace std;int main(){ int t; long long p; cin>>t; while(t--){ cin>>p; double num1=sqrt(12*p-3); long num2=num1; if((double)num2==num1){ long num3=num1; if((3+num3)%6==0){ cout<<"YES"<<endl; continue; } } cout<<"NO"<<endl; }}
///法二#include<iostream>#include<cmath>using namespace std;int main(){ int t; long long p; cin>>t; while(t--){ cin>>p; long long t=(long long)sqrt((p-1)/3.0); if(3*t*(t+1)+1==p) cout<<"YES"<<endl; else cout<<"NO"<<endl; }}
///法三#include<iostream>using namespace std;const int maxn = 1e6;long long a[maxn];int main(){ for(long long i=1;i<maxn;i++) a[i]=3*i*i+3*i+1; int t; long long p; cin>>t; while(t--){ cin>>p; int flag=0; for(int i=1;i<=maxn;i++){ if(a[i]==p){ flag=1; break; } else if(a[i]>p) break; } if(flag) cout<<"YES"<<endl; else cout<<"NO"<<endl; }}
总结:本来是一道水题,还是错了几遍,p<=10^12,一开始用的long,以为足够了,后来看书发现现在int居然和long的范围是一样的(坑啊!)最大也只有2^31,必须要用long long!!!
阅读全文
0 0
- hdu 6216 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
- HDU 6216 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
- hdu 6216 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
- hdu 6216 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
- A Cubic number and A Cubic Number
- A Cubic number and A Cubic Number
- **A Cubic number and A Cubic Number**
- A Cubic number and A Cubic Number
- A Cubic number and A Cubic Number
- A Cubic number and A Cubic Number
- VMware 12.5 pro下载+激活密钥 转载 2016年11月28日 00:06:02 270300 热门虚拟机软件VMware Workstation Pro现已更新至v12.5.2。12.0
- 一个菜鸟处理关于ajax向后台传值的问题
- 有很多if-else,该如何优化?
- 大端和小端格式的区别,以及二维数组和指针数组的学习总结。
- WebSocket学习(一)——webSocket简介
- hdu 6216 A Cubic number and A Cubic Number
- 用MR实现Join逻辑的两种方法
- python进阶----推导式,异常
- [LeetCode] Algorithms-9. Palindrome Number
- jQuery attr和prop
- php中的 "->"是什么
- MOOC清华《面向对象程序设计》第8章:栈的实现(采用模板实例化)
- 利用VS2013编写C++程序
- XSS过滤(敏感词过滤)