Il tuo codice non ha senso. Praticamente iteri da 2 a ceil(sqrt(Numero)), e tutte le volte controlli che il contatore sia minore di sqrt(Numero). E' assurdo: tanto valeva scrivere nel corpo del for direttamente il codice di else. E perché controlli se x è primo quando x > sqrt(Numero) ? Stai creando un crivello, non ti serve controllare la primalità di un numero. Inoltre è tutto sbagliato, poiché se Numero è ad esempio 48, nell'array numeriPrimi avrai 1, 2, 3, 4, 5, 6, in cui 1, 4 e 6 sono chiaramente non primi.
Infine, nel caso particolare di Numero = 1, che viene computato subito nel main, hai che x = 2 > sqrt(1) (dato che ceil(1) = 1), perciò l'array numeriPrimi ha un solo elemento non inizializzato: non so come si comporti C++, ma sembra proprio che in quel caso il valore presente nell'array sia 0. In questo modo, quando nell'ultimo for esegui una divisione per computare il modulo stai di fatto dividendo per zero, il che causa un errore di virgola mobile.
|