Cod sursa(job #1042637)

Utilizator alex_bucevschiBucevschi Alexandru alex_bucevschi Data 27 noiembrie 2013 15:07:46
Problema Ciurul lui Eratosthenes Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <bitset>
#include <fstream>
using namespace std;
ifstream fin("ciur.in");
ofstream fout("ciur.out");
bitset <2000010> a,f;
int i,j,l,sol,n;
void ciur()
{
    a[2]=1;
    l=2;
    sol++;
    for(;;)
    {
        a=a|(a<<l);
        if(l>n)break;
        l<<=1;
    }
    f=a;
    for(i=3;i*i<=n;i+=2)
    {
            if(!f[i])
            {
                a.reset();
                sol++;
                l=i;
                a[l]=1;
                for(;;)
                {
                    a=a|(a<<l);
                    if(l>n)break;
                    l<<=1;
                }
                f|=a;
            }
    }
    for(;i<=n;i++)
        if(!f[i])
            sol++;
}
int main()
{
    fin>>n;
    ciur();
    fout<<sol;
    return 0;
}