Pagini recente » Cod sursa (job #2956534) | Cod sursa (job #524890) | Cod sursa (job #1119474) | Cod sursa (job #387719) | Cod sursa (job #249901)
Cod sursa(job #249901)
/*SIEVE.CPP-ciurul lui Eratostene. Gaseste toate numerele prime pana la un n
*citit de la tastatura.
*/
#include<iostream>
#include<fstream>
#include<vector>
//#include<conio.h>
using namespace std;
void sieve(vector<bool> &nums, long long n)
{
nums.reserve(n);
nums.push_back(0);
for(long long i=1; i<n; i++) nums.push_back(1);
long long curr_prime=1;
while((curr_prime+1)*(curr_prime+1)-1<(n+1))
{
for(long long i=(curr_prime+1)*(curr_prime+1)-1; i<n; i+=(curr_prime+1))
//if((i+1)%(curr_prime+1)==0)
nums[i]=0;
do
{
curr_prime++;
}
while(!nums[curr_prime]);
}
}
int main(int argc, char** argv)
{
long long n;
ifstream in("ciur.in");
in>>n;
vector<bool> v;
sieve(v, n);
int cate=0;
for(int i=0; i<n; i++)
if(v[i])
cate++;
ofstream out("ciur.out");
out<<cate;
//getch();
}