Cod sursa(job #2665386)

Utilizator Sorin123-21Enachioiu Sorin-Catalin Sorin123-21 Data 30 octombrie 2020 17:50:13
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb
#include <fstream>
using namespace std;
ofstream out("ciur.out");
ifstream in ("ciur.in");
const int LUNGIME=31250;
const int MAXIMUL=2000000;

unsigned long long int v[100000],n;

void init()
{
    for(unsigned long long int i=0;i<LUNGIME;i++)
        v[i]=(1LL<<64)-1;
}

void ciur()
{
    unsigned long long int nr_prime=1,nr_crt=1,nr_prim,nr_non_prim,ord,col;
    unsigned long long int i,j,k;

    for(i=0;i<LUNGIME;i++)
    {
        for(j=1;j<=63&&nr_crt<=n;j+=2)
        {
            if(((v[i]>>j)&1LL)&&nr_crt>=2)
            {
                nr_prim=nr_crt;
                for(k=3;k*nr_prim<=MAXIMUL;k+=2)
                {
                    nr_non_prim=k*nr_prim;
                    ord=nr_non_prim%64;
                    col=nr_non_prim/64;
                    if((v[col]>>ord)&1LL)
                    {
                        v[col]=v[col]&(~(1LL<<ord));
                    }
                }
                nr_prime++;

            }
            nr_crt+=2;
        }
    }
    out<<nr_prime;
}

void afisare()
{
    unsigned long long int i,j,nr_crt=0;
    for(i=0;i<LUNGIME;i++)
    {
        for(j=0;j<64;j++)
        {
            if(((v[i]>>j)&1LL)&&nr_crt>=2)
                out<<nr_crt<<" ";
            nr_crt++;
        }
        out<<'\n';
    }
}

int main()
{
    init();
    in>>n;
    ciur();
    //afisare();
    return 0;
}