hdu 6216 A Cubic number and A Cubic Number
来源:互联网 发布:电动牙刷当跳蛋 知乎 编辑:程序博客网 时间:2024/06/03 19:08
题目链接:点这里。
Problem Description
A cubic number is the result of using a whole number in a multiplication three times. For example, 3×3×3=27 so 27 is a cubic number. The first few cubic numbers are 1,8,27,64 and 125. Given an prime number p. Check that if p is a difference of two cubic numbers.
Input
The first of input contains an integer T (1≤T≤100) which is the total number of test cases.For each test case, a line contains a prime number p (2≤p≤1012).
Output
For each test case, output 'YES' if given p is a difference of two cubic numbers, or 'NO' if not.
Sample Input
102357111317192329
Sample Output
NONONOYESNONONOYESNONO
【题意】
给你一个质数,问你是不是两个立方数的差,
【分析】
首先不妨设两个立方数较大的一个是a^3,较小的是b^3,利用立方差公式有
a^3-b^3 = (a-b)*(a^2+ab+b^2)
又因为给定的数是质数,所以显然可以得到的是a=b+1。然后利用之将上式化简为:
3*b*b+3*b+1
剩下的就简单多了,直接判断给定的质数是不是满足上式就行了。
【代码】
#include<iostream>#include<cstdio>#include<cstring>#include<string.h>#include<algorithm>#include<vector>#include<cmath>#include<stdlib.h>#include<time.h>#include<stack>#include<set>#include<map>#include<queue>#include<sstream>using namespace std;#define rep0(i,l,r) for(int i = (l);i < (r);i++)#define rep1(i,l,r) for(int i = (l);i <= (r);i++)#define rep_0(i,r,l) for(int i = (r);i > (l);i--)#define rep_1(i,r,l) for(int i = (r);i >= (l);i--)#define MS0(a) memset(a,0,sizeof(a))#define MS_1(a) memset(a,-1,sizeof(a))#define MSinf(a) memset(a,0x3f,sizeof(a))#define MSfalse(a) memset(a,false,sizeof(a))#define pin1(a) printf("%d",(a))#define pin2(a,b) printf("%d %d",(a),(b))#define pin3(a,b,c) printf("%d %d %d",(a),(b),(c))#define pll1(a) printf("%lld",(a))#define pll2(a,b) printf("%lld %lld",(a),(b))#define pll3(a,b,c) printf("%lld %lld %lld",(a),(b),(c))#define pdo1(a) printf("%f",(a))#define pdo2(a,b) printf("%f %f",(a),(b))#define pdo3(a,b,c) printf("%f %f %f",(a),(b),(c))#define huiche puts("")#define inf 0x3f3f3f3f#define lson (ind<<1),l,mid#define rson ((ind<<1)|1),mid+1,r#define uint unsigned inttypedef pair<int,int> PII;#define A first#define B second#define pb push_back#define mp make_pair#define ll long long#define eps 1e-8inline void read1(int &num) { char in; bool IsN=false; in=getchar(); while(in!='-'&&(in<'0'||in>'9')) in=getchar(); if(in=='-') { IsN=true; num=0; } else num=in-'0'; while(in=getchar(),in>='0'&&in<='9') { num*=10,num+=in-'0'; } if(IsN) num=-num;}inline void read2(int &a,int &b) { read1(a); read1(b);}inline void read3(int &a,int &b,int &c) { read1(a); read1(b); read1(c);}inline void read1(ll &num) { char in; bool IsN=false; in=getchar(); while(in!='-'&&(in<'0'||in>'9')) in=getchar(); if(in=='-') { IsN=true; num=0; } else num=in-'0'; while(in=getchar(),in>='0'&&in<='9') { num*=10,num+=in-'0'; } if(IsN) num=-num;}inline void read2(ll &a,ll &b) { read1(a); read1(b);}inline void read3(ll &a,ll &b,ll &c) { read1(a); read1(b); read1(c);}inline void read1(double &num) { char in; double Dec=0.1; bool IsN=false,IsD=false; in=getchar(); while(in!='-'&&in!='.'&&(in<'0'||in>'9')) in=getchar(); if(in=='-') { IsN=true; num=0; } else if(in=='.') { IsD=true; num=0; } else num=in-'0'; if(!IsD) { while(in=getchar(),in>='0'&&in<='9') { num*=10; num+=in-'0'; } } if(in!='.') { if(IsN) num=-num; return ; } else { while(in=getchar(),in>='0'&&in<='9') { num+=Dec*(in-'0'); Dec*=0.1; } } if(IsN) num=-num;}inline void read2(double &a,double &b) { read1(a); read1(b);}inline void read3(double &a,double &b,double &c) { read1(a); read1(b); read1(c);}///-------------------------------------------------------------------------------------------------------------const int maxm = 600000;ll ans[maxm];void init(void){ for(ll i = 1;i<maxm;i++) { ans[i] = (3*i+3)*i+1; }}int main() {// freopen("in.txt","r",stdin); int T; init(); ll x; while(scanf("%d",&T)!=EOF) { while(T--) { read1(x); bool flag = true; int l = 1,r = maxm-1; while(l<r)//当时傻乎乎的写了个二分,后来发现数据给的贼小 { int mid = (l+r)>>1; if(ans[mid]==x) { flag = false; puts("YES"); break; } else if(ans[mid]>x) { r = mid-1; } else l = mid+1; } if(flag) { if(ans[l]==x) puts("YES"); else puts("NO"); } } } return 0;}
阅读全文
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
- 图解SQL的JOIN
- 利用CSS计数函数counter()和counters()实现自动计数编号
- 使用ES6写react组件的几点注意事项
- THinkphp教程网址
- spring boot(18)-servlet、filter、listener
- hdu 6216 A Cubic number and A Cubic Number
- Version
- 将 Spark 中的文本转换为 Parquet 以提升性能
- spring boot(19)-拦截器
- 按照百分比分割页面
- 支付宝微信扫码支付样式
- 抽象工厂模式
- javaweb报错The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Pat
- MySQL update 嵌套 select