题解:
和
互质:假设两者不互质:设
,则
,矛盾。
所以
设
因为p为质数,所以
这样算出来p不一定是质数,所以枚举值验证一下。
代码:
#include <bits/stdc++.h>
using namespace std;
int const N = 1e6 + 10;
int l,n,m,vis[N],prime[N],len;
vector<int>v;
void prime_table(){
for(int i=2;i<N;i++){
if(!vis[i]) prime[len++] = i;
for(int j=0;j<len&&prime[j]*i<N;j++){
vis[i*prime[j]] = true;
if(i % prime[j] == 0) break;
}
}
}
void pre(){
for(int i=0;;i++){
int p = 3*i*i + 3*i + 1;
if(p > N) break;
if(!vis[p]) v.push_back(p);
}
}
int main(){
prime_table();
pre();
while(~scanf("%d",&l)){
if(l < 7) printf("No Special Prime!\n");
else{
int k = lower_bound(v.begin(),v.end(),l) - v.begin();
if(v[k] == l) k++;
k--;
printf("%d\n",k);
}
}
return 0;
}