https://vjudge.net/problem/HDU-2866
首先这个我推出来了
没发现答案肯定是差一的三次方
因为利用立方差公式
如果不差一那么就不是质数了
感觉有点像去年青岛网络预选赛的一道题
代码有点慢
懒得优化了
反正也不是什么卡时间的题
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e6;
vector<ll> V,T;
ll P[N+10];
set<ll> S;
int main(){
for(ll i=2;i<=N;++i){
if(P[i]==0){
V.push_back(i);
for(ll j=i*2;j<=N;j+=i)
P[j]=1;
}
}
for(ll i=1;i*i*i<=1e15;++i)
T.push_back(i*i*i);
for(ll i=1;i<T.size();++i){
S.insert(T[i]-T[i-1]);
}
ll x;
while(cin>>x){
ll ans=0;
for(ll i=0;i<V.size()&&V[i]<=x;++i){
if(S.find(V[i])!=S.end()) ++ans;
}
if(ans==0) cout<<"No Special Prime!"<<endl;
else cout<<ans<<endl;
}
}