Cod sursa(job #2076796)

Utilizator adiaioanaAdia R. adiaioana Data 27 noiembrie 2017 09:48:55
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <fstream>
#define nm 2000001
using namespace std;
ifstream fin("ciur.in");
ofstream fout("ciur.out");
int n,nr,c,rest,i,p,r;
int v[nm/32+5];
int main()
{
    fin>>n;
    v[0]=3;
    for(i=2; i*i<=n; i++)
    {
        rest=(i%32);
        c=i/32;
        if((v[c]&(1<<rest))==0)
        {
            for(int j=i; j*i<=n; j++)
            {
                p=(i*j)/32;
                r=(i*j)%32;
                v[p]=(v[p]|(1<<r));
            }
            nr++;
        }
    }
    for(int j=i;j<=n;j++)
    {
        rest=(j%32);
        c=j/32;
        if((v[c]&(1<<rest))==0)
            nr++;
    }
    fout<<nr<<'\n';
    return 0;
}