题意:给出n,根据公式求和
题解:这里要用到一个数论定理——威尔逊定理
当且仅当p为素数时:( p -1 )! ≡ -1 ( mod p )
即:当P为质数时,P可以整除(p - 1)! + 1
所以此题只要判断3i + 7是否为质数即可
代码如下:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 4e6 + 30;
int n,vis[maxn];
int sum[maxn];
void get_primes(int n){
for(int i = 1;i <= n;i++) vis[i] = 1;
vis[1] = 0;
for(int i = 2;i * i <= n;i++){
if(vis[i]){
for(int j = i * i;j <= n;j += i){
vis[j] = 0;
}
}
}
}
int main()
{
get_primes(maxn - 10);
for(int i = 1;i <= 1000000;i++) sum[i] = sum[i - 1] + vis[3 * i + 7];
int kase;scanf("%d",&kase);
while(kase--){
scanf("%d",&n);
printf("%d\n",sum[n]);
}
return 0;
}