Numeri primi

Sk_Anonymous
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;
}

Risposte
Marvin1
codifico:
praticamente tu dici che un numero è primo se il resto della divisione dello stesso con 2,3,5,7 da zero?

Marvin

lorven
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.

Nidhogg
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;
}

Principe2
: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"

Kroldar
"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

eafkuor1
perchè non è una barzelletta?

Sk_Anonymous
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?

Cheguevilla
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...

lorven
"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;   
}

:-)

eugenio.amitrano
Ciao a tutti,
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

eafkuor1
guardate questo, fatto da una mia vecchia conoscenza su internet:

http://www.kpevillage.org/code/scrivellante.cpp

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.