Oppure

Loading
07/06/09 12:50
matteog
#include "stdafx.h"
#include <iostream>
using namespace std;
void main()
{
	int vett[10000];
	int J=0,I=0,N=0;
	do
	{
    	cout<<"scrivi il numero limite dei numeri primi!!"<<endl;
	    cin>>N;
	}
	while(N<10000&&N<0);
	cout<<"questi sono i numeri da 1 al numero inserito  ->"<<endl;
	for(I=1;I<N;I++)
	{
		vett[I]=I+2;
	}
	for(I=0;I<N;I++)
	{
		for(J=1;J<N;J++)
		{
			vett[I*J]=0;
		}
	}
	for(I=0;I<N;I++)
	{
		if(vett[I]!=0)
		{
			cout<<vett[I]<<endl;
		}
	}

 system("pause");
}
	


ciao a tutti nn mi stampa i numeri primi spatet dirmi il perchè??
aaa
07/06/09 15:31
Lawliet
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)
aaa
08/06/09 9:20
non so bene come funzioni questo algoritmo ma penso che il tuo problema sia qui

 for(I=0;I<N;I++)
    {
        for(J=1;J<N;J++)
        {
            vett[I*J]=0;
        }
    } 


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 08/06/09 9:24