Sn=sigma(ak);
if(isprime[3*k+7])
ak=1
else ak=0;
分析:
因为威尔逊定理
所以
1、p=3k+7为质数 前项为 ( (K*p-1)+1 )/p ==K 后项为:(K*p-1)/p==K-1 所以ak=K-(K-1)==1
2、3k+7为合数 : ==
因为 当且仅当(3k+6)!mod(3k+7)== -1 则 ==+1
又因为 (3k+6)!mod(3k+7)!= -1 所以 两者相等 所以 ak=0;
ll n;
bool isp[3*maxn];
int sum[maxn];
void getprime(){
mem(isp,1);
isp[1]=0;
for(int i=2;i<3*maxn;i++){
if(isp[i]==0){
continue;
}
//cout<<i<<en;
for(int j=i+i;j<3*maxn;j+=i){
isp[j]=0;
}
}
}
signed main() {
#ifdef local
freopen("input2.txt","r",stdin);
#endif //local
int T;
getprime();
for(int i=1;i<=1000000;i++){
int tem=3*i+7;
sum[i]=sum[i-1]+(isp[tem]==1);
}
cin>>T;
for(int i=0;i<T;i++){
int tem;
rd(tem);
cout<<sum[tem]<<en;
}
return 0;
}