Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - crivello eratostene
Forum - C/C++ - crivello eratostene

Avatar
matteog (Normal User)
Pro


Messaggi: 149
Iscritto: 10/04/2009

Segnala al moderatore
Postato alle 14:50
Domenica, 07/06/2009
Codice sorgente - presumibilmente C++

  1. #include "stdafx.h"
  2. #include <iostream>
  3. using namespace std;
  4. void main()
  5. {
  6.         int vett[10000];
  7.         int J=0,I=0,N=0;
  8.         do
  9.         {
  10.         cout<<"scrivi il numero limite dei numeri primi!!"<<endl;
  11.             cin>>N;
  12.         }
  13.         while(N<10000&&N<0);
  14.         cout<<"questi sono i numeri da 1 al numero inserito  ->"<<endl;
  15.         for(I=1;I<N;I++)
  16.         {
  17.                 vett[I]=I+2;
  18.         }
  19.         for(I=0;I<N;I++)
  20.         {
  21.                 for(J=1;J<N;J++)
  22.                 {
  23.                         vett[I*J]=0;
  24.                 }
  25.         }
  26.         for(I=0;I<N;I++)
  27.         {
  28.                 if(vett[I]!=0)
  29.                 {
  30.                         cout<<vett[I]<<endl;
  31.                 }
  32.         }
  33.  
  34.  system("pause");
  35. }


ciao a tutti nn mi stampa i numeri primi spatet dirmi il perchè??


matteog
PM Quote
Avatar
Lawliet (Normal User)
Expert


Messaggi: 386
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 17:31
Domenica, 07/06/2009
mmm.. sinceramente non si capisce che algoritmo hai usato :S (o meglio non l'ho capito io...)

Non potresti fare in maniera più semplice cioè ciclando per ogni numero incrementato fino a N, e per ogni numero fai divisione per modulo usando ---> %(che dà il resto) e verificare con una condizione che il resto sia sempre diverso da 0 per i-volte, SE è vera per tutto il ciclo allora è un numero primo altrimenti è falsa e passa al numero successivo! :)
(spero di essere stato chiaro, scusami.. è che sto andando in fretta che sono un rappresentante di lista!! XD)


"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
cit. theprogrammer
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 11:20
Lunedì, 08/06/2009
non so bene come funzioni questo algoritmo ma penso che il tuo problema sia qui

Codice sorgente - presumibilmente Plain Text

  1. for(I=0;I<N;I++)
  2.     {
  3.         for(J=1;J<N;J++)
  4.         {
  5.             vett[I*J]=0;
  6.         }
  7.     }



Scandisci tutto il vettore sia con i che con j quindi quando metti vett[i*j] a 0 stai mettendo tutto il vettore a 0.

Visto che alla fine metti stampa solo se è diverso da 0 non stampa nulla^^

Tuttavia il problema non è la stampa ma l'algoritmo^^
Non lo conosco e non so come implementarlo, ma cosi non fai altro che mettere tutto il vettore a 0 ;)

EDIT:
più precisamente direi che:
-la prima volta che esegui il ciclo setti N volte vett[0] = 0; (I = 0 la prima volta, di conseguenza tutte le i*j sono 0^^
-la seconda volta setti tutto il vettore a 0^^
-tutte le altre volte fai la stessa cosa

Ultima modifica effettuata da il 08/06/2009 alle 11:24
PM Quote