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?!
Răspunsuri la întrebare
Răspuns de
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
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
Răspuns de
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;
}
#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;
}
Alte întrebări interesante
Matematică,
8 ani în urmă
Limba română,
8 ani în urmă
Limba română,
8 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă
Istorie,
9 ani în urmă