Cod sursa(job #2715409)

Utilizator crismariuCrismariu Codrin crismariu Data 3 martie 2021 17:33:22
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#define test " test "
#define ll long long
#define pii pair<int, int>
#define FASTIO   \
    cin.tie(0);  \
    cout.tie(0); \
    ios_base::sync_with_stdio(0);
#define FILES                      \
    freopen("strmatch.in", "r", stdin); \
    freopen("strmatch.out", "w", stdout);
#define testcase             \
    int T;    \
    cin >> T; \
    while (T--)
#define vec vector<int>
using namespace std;

bool ciur[2000005];
int prim[2000005], ind = 0;

void prec()
{
    ciur[1] = ciur[0] = 1;
    for(int i = 2; i * i <= 2000005; i++)
        for(int j = i * i; j <= 2000005; j += i)
            ciur[j] = 1;
    for(int i = 2; i <= 2000005; i++)
        if(!ciur[i])
            prim[++ind] = i;
}

int cb(int n)
{
    int l = 1, r = ind;
    while(l <= r)
    {
        int mid = (l + r) / 2;
        if(prim[mid] <= n && prim[mid + 1] > n)
            return mid;
        else if(prim[mid] > n)
            r = mid - 1;
        else
            l = mid + 1;
    }
    return 0;
}

signed main()
{
    prec();
    int n;
    cin >> n;
    cout << cb(n);
}