Numeri primi tra 1 e N

di il
4 risposte

Numeri primi tra 1 e N

Ciao, non riesco a concludere questo "semplice" (non per me ) codice.

// Ricerca di numeri primi in una serie
#include <iostream>
using namespace std;
int main ()
{	int N;
	cout << "Inserisci N ed io ti diro' quali dei numeri compresi tra 1 ed N sono primi." << endl;
	cin >> N;
	int * a = new int [N];
	for (int i = 0; i < N; i++)
	{
		a [i] = i + 1;
		if (???)
		cout << a [i] << " non e' primo. " << endl;
		else
		cout << a [i] << " e' primo. " << endl;
		
	}

return 0;
}

Se io dovessi mettere N = 9, l'array sarebbe:
1 2 3 4 5 6 7 8 9
Dovrebbe stampare:
1 è primo,
2 è primo,
3 è primo,
4 non è primo,
5 è primo,
6 non è primo,
7 è primo,
8 non è primo,
9 non è primo.

Stavo pensando di far qualcosa del tipo:
ad eccezione di 1, tutti i numeri devono essere divisi per tutti i propri "numeri minori uguali" fino ad arrivare ad 1 e se il cont risulta maggiore di 2 (un numero è primo se divisibile per 1 per sé stesso), il numero non è primo... ma non funziona)

Per essere primo deve dare resto 0 solo alla divisione fra sé stesso e 1 ma non so come scriverlo nel parametro.


// Ricerca di numeri primi in una serie
#include <iostream>
using namespace std;
int main ()
{	int N;
	int cont = 0;
	cout << "Inserisci N ed io ti diro' quali dei numeri compresi tra 1 ed N sono primi." << endl;
	cin >> N;
	int * a = new int [N];
	int * b = new int [N];
	for (int i = 0; i < N; i++)
	{
		a [i] = i + 1;
		for (int i = 1; i <= N; i++)
		{
			b [i] = i;
			if (a [i] % b [i] != 0)
				cont++;
		}
		if (cont == 2)
		cout << a[i] << " e' primo" << endl;
	}
	return 0;
}
		

4 Risposte

  • Re: Numeri primi tra 1 e N

    A quanto ho capito il problema per te risiede nel verificare la primalità di un numero. Allora:
    tu devi controllare se da 2 a n-1 (si da per scontato che sia divisibile per 1 e per se stesso) se almeno una volta si trova un divisore, se lo trova allora non è primo (false), in caso contrario, se non venisse trovato, allora è primo (true). Nel tuo caso aggiungi sopra il main questa funzione e richiamala nel main, inserendo i numeri attraverso delle variabili.
    bool primo(int n){
    if (n==1 || n==0) return true;
        for (int i=2;i<n;i++){
            if (n%i==0){
                return false;
            }
        }
        return true;
    }
  • Re: Numeri primi tra 1 e N

    @Shark44

    Wikipedia ha scritto:


    In matematica, un numero primo è un numero intero positivo che abbia esattamente due divisori distinti.
    Quindi sia 0 che 1 non possono essere considerati numeri primi.
    Tralasciando questa considerazione di carattere più "formale", volevo farti notare che sarebbe più corretto chiamare quella funzione dispari() piuttosto che primo()!
    Premesso che è vietato dal regolamento fornire pappa pronta, per evitare di confondere ancora di più le idee dell'autore del topic, ti consiglio di assicurarti di quello che stai scrivendo facendo qualche ricerca su google e testando il codice proposto.

    @luggigi
    Oltre alla strada prospettata da @Shark44, un altro modo per risolvere il problema potrebbe essere il seguente:
  • Re: Numeri primi tra 1 e N

    Shark44 ha scritto:


    A quanto ho capito
    Nel caso del tuo codice, ad esempio il 15, come sarebbe considerato?
  • Re: Numeri primi tra 1 e N

    Allora:
    1) Mi scuso ma non sapevo di questa regola, le prossime volte cercherò di far ragionare;
    2) Ho specificato che 0 e 1 fossero primi in quanto l'ho letto dal problema posto da @oregon, ho voluto quindi seguire ciò che lui ha scritto. Potrebbe infatti essere stato chiesto esplicitamente nel testo.
    3) 15 viene considerato come primo, ho corretto velocemente il codice, avevo dimenticato di aggiornare una cosa.
Devi accedere o registrarti per scrivere nel forum
4 risposte