题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2866
题意:计算在
(
0
,
L
]
(0,L]
(0,L]范围内,有多少素数
p
p
p满足表达式:
n
3
+
p
∗
n
2
=
m
3
n^3+p*n^2=m^3
n3+p∗n2=m3,
n
,
m
n,m
n,m为大于0的自然数。
思路:https://blog.youkuaiyun.com/ACdreamers/article/details/8572959
只需要预处理枚举
1
−
1
e
6
1-1e6
1−1e6范围内的
x
x
x,使其满足
p
=
(
x
+
1
)
3
−
x
3
p=(x+1)^3-x^3
p=(x+1)3−x3是素数,最后求前缀和就可以实现
O
(
1
)
O(1)
O(1)输出结果。
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+10;
int pri[maxn];
int vis[maxn];
int sum[maxn];
void presolve()
{
for(int i=0;i<maxn;i++){
vis[i]=0;
sum[i]=0;
}
vis[1]=1;
for(int i=2;i<maxn;i++){
if(vis[i]==0){
for(int j=2*i;j<maxn;j+=i){
vis[j]=1;
}
}
}
sum[1]=0;
for(ll x=0;;x++){
ll tmp=(x+1)*(x+1)*(x+1)-x*x*x;
if(tmp>1000000){
break;
}
if(vis[tmp]==0){
sum[tmp]=1;
}
}
for(int i=1;i<maxn;i++){
sum[i]+=sum[i-1];
}
}
int main()
{
presolve();
int L;
while(~scanf("%d",&L)){
if(sum[L])
printf("%d\n",sum[L]);
else{
printf("No Special Prime!\n");
}
}
return 0;
}