👤

1) Ciurul lui Eratostene: Să se formeze un vector care să conţină elementele prime mai mici decât un număr dat n, n<1000, utilizând procedeul de excludere prezentat în manualul de matematică (excluderea se va face prin inlocuirea elementului cu 0 şi nu se vor afişa elementele nule).

Răspuns :

#include <iostream>
using namespace std;

int main(){
    int v[1001], n, i, j, nr;

    for(i=1;i<=1000;i++)v[i]=i;
    v[1]=0;//Nu este nr prim
    for(i=2;i<=1000;i++){
        if(v[i]!=0){//daca nu l-am eliminat
            nr=v[i];
            for(j=i+nr;j<=1000;j+=nr){
                //Setam toti multiplii lui nr la 0
                v[j]=0;
            }
        }
    }
    for(i=1;i<=1000;i++)
        if(v[i]!=0)cout<<v[i]<<" ";
}


Asa cred ca ar trebui sa fie :D 
Varianta mai eficientă și care folosește mai puțin spațiu:

#include <iostream>
using namespace std;
const int NMAX = 200000000;

char ciur[NMAX];

int main()
{
    int n;
    cin >> n;
    fill_n(ciur, NMAX, 1);
    for(int i=2; i*i<=n; i++) {
        if(ciur[i])
            for(int j=i+i; j<=n; j+=i)
                ciur[j] = 0;
    }

    for(int i=2; i<=n; i++)
        if(ciur[i]) cout << i << ' ';
    return 0;
}