calcolo numeri primi c

« Older   Newer »
  Share  
tonno16
view post Posted on 23/10/2012, 10:01




salve a tutti. Spero di iniziare bene la mia avventura con questo linguaggio. Fino ad oggi ho eseguito i cili che mi hanno dato correttamente in quanto me li ricordavo da quando usavo JScript. Oggi invece mi sono impuntato:

mi viene richiesto un programma che stampi a video i primi n numeri primi.
essendo un numero primo divisibile per se stesso e per uno o calcolato il resto per ogni i%­n dove per esempio:
se il numero nel for è uguale a 4 allora ho fatto un altro for dove i=4 quindi --> i/n poi i/n poi ancora i/n poi ancora i/ dove n viene incrementato di uno. se 'è un resto==0 allora cont++. se cont==2 allora il numero è primo.
mi funziona ma riporta numeri casuali a video.

ecco il sorgente

CODICE
#include <stdio.h>
#include <stdlib.h>

int main(){
 
   int cont=0;
   int numero,numerofinale;
   int resto,i,n;
      // deve essere = 12
   int verifica;
   
   
   
   printf("PROGRAMMA CHE STAMPA A VIDEO I PRIMI N NUMERI PRIMI \n\n");
   printf("inserire un numero");
   scanf("%d", &numero);
   printf("saranno visualizzati i primo %d numeri primi \n\n", numero);
   
   numerofinale=numero;
   
   int primi[numero];  
                     
   for(i=1;cont<numero;i++){ //con i sono i numeri trovati. ossia se i=12 ho trovato i primi 12 numeri
             
           verifica=0;
           for(n=1;n<=i;n++){
               
               resto=i%­n;
               
               
               if(resto==0){  verifica++; }
           
           
 
           if(verifica==2){
               primi[numero]=i;
               
               cont++;}
           }    

   }// kiusura for
   
 
   
     for(numero=0;numero<cont;numero++){
       printf(" %d \n", primi[numero]);
     }    
   
 system("pause");
 return(0);    
}



IDEE?? O CONSIGLI???
 
Top
Elemento 38
view post Posted on 24/10/2012, 10:48




Secondo me stai facendo tutto un po' a caso, riguarda l'algoritmo perché il tuo ha poco senso.
int primi[numero]; Questo è profondamente sbagliato(a meno che numero non sia stata definita con un #define), ma proprio concettualmente, le allocazioni dinamiche si fanno con una malloc, prima di fare programmi più complessi, devi studiarti le basi.
Non ha senso controllare il resto delle divisioni fino a n, basta fino a radice di n.
 
Top
view post Posted on 24/10/2012, 17:36
Avatar

Rompiball

Group:
Appassionati
Posts:
2,612
Location:
briansa

Status:


Tonno, io un programma così l'ho fatto qualche tempo fa in C (lo sto studiando pure io).
Avevo fatto: metti numero 10, non facevo 10/9, 10/8 ecc... ma il contrario in modo che si bolcca subito nel caso e non perde tempo inutile
10/2=5 resto zero, il ciclo for si blocca

Poi, supponiamo, che tu abbia ancora il numero X, io facevo andare la divisione solo fino a metà del numero stesso: esempio 13 (numero primo), non ha senso fare 13/7, essendo 7*2=14.
In questo modo, ottimizzi ancora di più.
Per quanto riguarda la ridice di n che dice Elemento, non lo so, non ho basi sufficienti, credo che sia qualcosa legato al crivello di Eratostene, che ho letto tempo fa.
Comunque, Tonno, non è difficile farlo...ci sono riuscito io che col C sono agli inizi :)

 
Top
tonno16
view post Posted on 28/10/2012, 16:42




CITAZIONE
Secondo me stai facendo tutto un po' a caso, riguarda l'algoritmo perché il tuo ha poco senso.
int primi[numero]; Questo è profondamente sbagliato(a meno che numero non sia stata definita con un #define), ma proprio concettualmente, le allocazioni dinamiche si fanno con una malloc, prima di fare programmi più complessi, devi studiarti le basi.
Non ha senso controllare il resto delle divisioni fino a n, basta fino a radice di n.

si dalle basi, hai ragione. Per la mia prof queste sono le basi.

Comunque posto la soluzione nel caso a qualcuno servisse:

CITAZIONE
CODICE
#include <stdio.h>
#include <stdlib.h>

int main(){
 
   int k,i,n,cont,resto,primi=0;
   int numero=0;
   
   printf("    PROGRAMMA CHE CALCOLA GLI N NUMERI PRIMI \n\n");
   
   while(numero<=0){
       printf("inserire quanti n numeri primi vuoi trovare \n");
       scanf("%d", &numero);
   }  
     
 i=1;
 do{
     cont=0;        
               
     for(n=1;n<=i;n++){
           resto=i%­n;
           if(resto==0){  cont++; }
     }//chiudo FOR
       
     if(cont<=2){ printf("%d  ", i); primi++; }
   
      i++;
 }// chiudo DO  

 while(primi!=numero);    
 
printf("\n\n\n\n\n\n");  
system("pause");
return 0;
}

molto meglio secondo me, inoltre non utilizzo alcun vettore
 
Top
PISELLO CORTO
view post Posted on 27/9/2014, 08:41




FATE DEI PROGRAMMI DEL CAZZO NON NE FUNZIONA UNO PORCA DI QUELLA PUTTANA FROCI TORNATE A SCUOLA

PISELLO CORTO HA RAGIONE
 
Top
vagina pelosa
view post Posted on 27/9/2014, 08:45




PISELLO CORTO HA RAGIONE SIETE DEGLI SFIGATI COPROFAGI/COPROFAGHI
 
Top
view post Posted on 27/9/2014, 08:58
Avatar

Rompiball

Group:
Appassionati
Posts:
2,612
Location:
briansa

Status:


bha....andate da qualche altra parte per favore...o se no fateci vedere voi quanto siete bravi... :)
I soliti buffoni che voglione creare scompiglio....ma che nessuno se li caga...
Ciao ragazzi e buona giornata :)
 
Top
6 replies since 23/10/2012, 10:01   6052 views
  Share