Cod sursa(job #629232)

Utilizator sandiceUngureanu Delia-Olga sandice Data 2 noiembrie 2011 21:41:17
Problema Ciurul lui Eratosthenes Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#include <fstream>

using namespace std;

ifstream fi("ciur.in");
ofstream fo("ciur.out");

long long n,a[2000002],nr=0;

void citire()
{
	fi>>n;
	fi.close();
}

void ciur()
{
	
	int k=2,kk=0;
	for(int i=2;i<=n;i++,k++)
	{
		if(k>=32)
		{
			kk++;
			k-=32;
		}
		int x=1;
		x<<=k;
		if(!(x&a[kk]))
		{
			//fo<<i<<" ";
			nr++;
			for(int p=kk,q=i,r=k;q<=n;q+=i)
			{
				p+=kk;
				r+=k;
				if(r>=32)
				{
					r-=32;
					p++;
				}
				int y=1;
				y<<=r;
				if(!(y&a[p]))
				{
					a[p]+=y;
				}
			}
		}
	}
}

int main()
{
	citire();
	ciur();
	fo<<nr<<"\n";
	fo.close();
	return 0;
}