Informatică, întrebare adresată de Utilizator anonim, 9 ani în urmă

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).


artur99: excluderea se face la inserare in vector sau la afisare? lol, nu inteleg de ce ar trebui inlocuit cu 0 odata ce nu se afla in vector?!
Utilizator anonim: nu stiu, asta e toata cerinta
artur99: aa, lol, incep sa inteleg: https://ro.wikipedia.org/wiki/Ciurul_lui_Eratostene
artur99: =))))))))
artur99: probabil trebuie facut intai tot vectorul de 1000 de elemente, apoi eliminate cele in plus
artur99: dar nu inteleg de ce ar folosi cineva algoritmul asta :))
Utilizator anonim: ma rog, poti sa ma ajuti
artur99: incerc acu :D

Răspunsuri la întrebare

Răspuns de artur99
1
#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 

Utilizator anonim: mersii
artur99: cp :D
AntiEaglesDavids: ai ratat exact esența algoritmului varul meu drag
Răspuns de AntiEaglesDavids
0
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;
}


artur99: e doar € 99+VAT
AntiEaglesDavids: :)))))))))))))))))
artur99: http://prntscr.com/7r6ger :D Who's the boss now? :))
AntiEaglesDavids: si radea de mine :)))
artur99: :))
artur99: aaa
artur99: nuu codul l-am scris ca sa ma conving :D
artur99: eu ziceam de tema :D
AntiEaglesDavids: TE-AM FACUT TE-AM FACUT CE MAI VRAIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
artur99: :)))))
Alte întrebări interesante