题目链接:【UVA 1434 】
求Sn(1<=n<=10^6)
威尔逊定理:当且仅当p是质数时,((p-1)!+1)%p=0 并且(p-1)! % p = p-1
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
const int inf=1e6+10;
int sum[inf], prime[3*inf];
int t, n;
void isprime()
{
memset(prime, 0, sizeof(prime));
for(int i=2; i<3*inf; i++)
{
if(!prime[i])
{
for(int j=i+i; j<3*inf; j+=i)
{
prime[j] = 1;
}
}
}
}
void init()
{
isprime();
sum[0]=sum[1]=0;
for(int i=2; i<inf; i++)
{
sum[i] = sum[i-1]+(1-prime[3*i+7]);
}
}
int main()
{
init();
scanf("%d", &t);
while(t--)
{
scanf("%d", &n);
printf("%d\n", sum[n]);
}
return 0;
}