Numeri primi
devo scrivere un prog in c che dato un numero mi dice se è primo....io l'ho fatto così.....è sbagliato?
#include
#include
int main()
{
int num;
printf ("Dammi il numero\n");
scanf ("%d",&num);
if ((num%2!=0)&&(num%3!=0)&&(num%5!=0)&&(num%7!=0))
printf ("Il numero inserito e\' primo\n");
else
printf ("Il numero inserito non e\' primo\n");
system ("PAUSE");
return 0;
}
#include
#include
int main()
{
int num;
printf ("Dammi il numero\n");
scanf ("%d",&num);
if ((num%2!=0)&&(num%3!=0)&&(num%5!=0)&&(num%7!=0))
printf ("Il numero inserito e\' primo\n");
else
printf ("Il numero inserito non e\' primo\n");
system ("PAUSE");
return 0;
}
Risposte
codifico:
praticamente tu dici che un numero è primo se il resto della divisione dello stesso con 2,3,5,7 da zero?
Marvin
praticamente tu dici che un numero è primo se il resto della divisione dello stesso con 2,3,5,7 da zero?
Marvin
Il tuo algoritmo considera primi gli interi non multipli di 2, 3, 5 oppure 7, il che è vero solo per gli interi minori di $121$.
Un intero $n$ è sicuramente primo se non ha divisori compresi tra $2$ e $sqrt(n)$.
Perciò il pogramma deve necessariamente usare un ciclo, nel quale si verifichi la divisibilità di $n$ con tutti i suoi
potenziali divisori.
Un intero $n$ è sicuramente primo se non ha divisori compresi tra $2$ e $sqrt(n)$.
Perciò il pogramma deve necessariamente usare un ciclo, nel quale si verifichi la divisibilità di $n$ con tutti i suoi
potenziali divisori.
Ecco un algoritmo:
int primo (int numero) { int j; if (numero == 2) return 1; if (! numero % 2) return 0; for (j = 3; j < numero/2; j += 2) if (!numero%j) return 0; return 1; }

mi viene in mente lo statistico che dice: "bene, poichè $60$ è divisibile per $1$,
per $2$, per $3$, per $4$, per $5$, per 6$$.. è divisibile per tutti i numeri"
"ubermensch":
:roll: oddio...
mi viene in mente lo statistico che dice: "bene, poichè $60$ è divisibile per $1$,
per $2$, per $3$, per $4$, per $5$, per 6$$.. è divisibile per tutti i numeri"
grande quella storiella... quando la lessi per la prima volta credevo fosse una barzelletta
perchè non è una barzelletta?
Spulciando le dispense del prof dell'altro canale del corso di informatica ho trovato uno pseudocodice che tradotto mi da questa roba. E' giusto? 8)
ps postate la barzelletta?
#include<stdio.h> #include<stdlib.h> int main() { int provadiv=2,trovatodiv=0,numero; printf ("Dammi il numero\n"); scanf ("%d",&numero); while (provadiv<numero) { if ((provadiv%numero)==0) trovatodiv=1; provadiv=provadiv+1; } if (trovatodiv=1) printf ("Il numero non e\' primo\n"); else printf ("Il numero e\' primo\n"); system ("PAUSE"); return 0; }
ps postate la barzelletta?
mi viene in mente lo statistico che dice: "bene, poichè $60$ è divisibile per $1$,
per $2$, per $3$, per $4$, per $5$, per 6$$.. è divisibile per tutti i numeri"
Perchè ce la prendiamo sempre con gli statistici?
Non generalizziamo, c'è anche gente per bene...
"leonardo12345":
Spulciando le dispense del prof dell'altro canale del corso di informatica ho trovato uno pseudocodice che tradotto mi da questa roba. E' giusto? 8)
#include<stdio.h> #include<stdlib.h> int main() { int provadiv=2,trovatodiv=0,numero; printf ("Dammi il numero\n"); scanf ("%d",&numero); while (provadiv<numero) { if ((provadiv%numero)==0) trovatodiv=1; provadiv=provadiv+1; } if (trovatodiv=1) printf ("Il numero non e\' primo\n"); else printf ("Il numero e\' primo\n"); system ("PAUSE"); return 0; }
ps postate la barzelletta?
C'è qualche problema. Eccone la versione corretta e un po' velocizzata:
#include<stdio.h> #include<stdlib.h> int main() { int provadiv=2,trovatodiv=0,numero; printf ("Dammi il numero\n"); scanf ("%d",&numero); while ((provadiv<=sqrt(numero)) && (trovatodiv == 0)) { if ((numero%provadiv)==0) trovatodiv=1; else provadiv=provadiv+1; } if (trovatodiv==1) printf ("Il numero non e\' primo\n"); else printf ("Il numero e\' primo\n"); system ("PAUSE"); return 0; }

Ciao a tutti,
forse puo' essere utile.
Ecco una funzione che esegue il test di primalita' sfruttando il Crivello di Eratostene:
Occorrono queste costanti:
Ecco la funzione:
A presto,
Eugenio
forse puo' essere utile.
Ecco una funzione che esegue il test di primalita' sfruttando il Crivello di Eratostene:
Occorrono queste costanti:
#define kMinPrime 2 typedef enum { False, True } bool;
Ecco la funzione:
/* Description: Questa funzione verifica la primalita' di un numero Inputs: iNumber - Numero da verificare Outputs: False - Numero non primo True - Numero Primo */ bool bPrime(long iNumber) { long iLoop, iDivisor; // Condizione di sicura non primalita' if(iNumber < kMinPrime) return False; // Condizione di sicura primalita' if(iNumber == kMinPrime) return True; // Calcola il massimo divisore da verificare iDivisor = sqrt(iNumber); // Esegue il Crivello for(iLoop = kMinPrime; iLoop <= iDivisor; iLoop++) if(bPrime(iLoop) && !(iNumber % iLoop)) return False; // Se arriva a questo punto il numero e' sicuramente primo. return True; }
A presto,
Eugenio
guardate questo, fatto da una mia vecchia conoscenza su internet:
http://www.kpevillage.org/code/scrivellante.cpp
http://www.kpevillage.org/code/scrivellante.cpp