Всем добрый вечер!
Возникла следующая проблема, нужно написать программу - Решето Эратосфена (сколько простых чисел меньших данного) с некоторыми ограничениями.
Вводится число 2<=N<=200000000
Лимит памяти 30mb Cобственно данная программа занимает
~190-200mb, при
N=200000000;
нужно уменьшить размер массива
в 8 раз, я понимаю, что нужно обращаться к битам, но не могу реализовать.
На форуме пишу первый раз, поэтому сильно не ругайте.
Спасибо!
Код:
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <cstring>
using namespace std;
int main()
{
int n;
cin>>n;
char* S;
S=(char*)malloc(n* sizeof(bool));
int count;
int i,j;
float sqrt_n = sqrt(n)+1;
memset(S,false,n);
for(i = 2 ; i < sqrt_n ; ++i)
if(S[i] == 0)
for(j = i*i ; j < n ; j+=i)
S[j]=1;
count=0;
for(i = 2 ; i < n ; ++i)
if(S[i] == 0)
count++;
if(count > 0) cout<<count; else cout<<'1';
free(S);
return 0;
}