YAPTCHA UVALive

题意就是叫你求上述那个公式在不同N下的结果。 思路:很显然的将上述式子换下元另p=3k+7则有 Σ【(p-1)!+1/p-[(p-1)!/p]】 接下来用到一个威尔逊定理,如果p为素数则

( p -1 )! ≡ -1 ( mod p )    即 (p-1)!+1  为 p的整数倍  因此不难发现【*】里面要么为0,要么为1,为1的情况就是p为素数的情况,然后统计k=1-n中 有多少个3*k+1素数就好了

#include <iostream>
#include <cstdio>
#include <sstream>
#include <cstring>
#include <map>
#include <set>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#define MOD 2018
#define LL long long
#define ULL unsigned long long
#define Pair pair<int, int>
#define mem(a, b) memset(a, b, sizeof(a))
#define _  ios_base::sync_with_stdio(0),cin.tie(0)
//freopen("1.txt", "r", stdin);
using namespace std;
const int maxn = 3e6+10, INF = 0x7fffffff;
int vis[maxn], ans[maxn];
void init()
{
    mem(vis, 0);
    for(int i=2; i<=sqrt(maxn+0.5); i++)
        if(!vis[i])
            for(int j=i*i; j<maxn; j+=i)
                vis[j] = 1;
}
void f()
{
    mem(ans, 0);
    for(int i=1; i<= 1e6; i++)
    {
        int temp = 3*i+7;
        ans[i] = ans[i-1] + (1 - vis[temp]);
    }
}


int main()
{
    init();
    f();
    int T, n;
    cin>> T;
    while(T--)
    {
       cin>> n;
       cout<< ans[n] <<endl;
    }
    return 0;
}
自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
原文地址:https://www.cnblogs.com/WTSRUVF/p/9334462.html