👤

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;
}

Vă mulțumim pentru vizita pe platforma noastră dedicată Informatică. Sperăm că informațiile prezentate v-au fost utile. Dacă aveți întrebări sau aveți nevoie de suport suplimentar, nu ezitați să ne contactați. Așteptăm cu entuziasm să reveniți și vă invităm să ne adăugați la lista de favorite!


Viz Lesson: Alte intrebari