Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [C] Calcolo fattori primi

    Salve ho un algoritmo che dato un numero lo scompone nei suoi fattori primi e li stampa...ora in che modo posso aumentare la dimensione del numero inserito dall'utente oltre a quella di un int continuando ad usare scanf e sqrt?

    Grazie scusate la domanda banale, ma non è per me, è tardi, e insomma....Grazie ancora!

    Ciao!

  2. #2
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    Non so se ti riferisci a questo....

    dichiarala "long unsigned int " (un intero)... se no puoi anche utilizzare un float, un double, long double... (questi a virgola mobile.... ma non fa assolutamente nulla).. vedi tu...

  3. #3
    Intanto grazie per la riposta...
    Con un Unsigned Long Int ho a disposizione 8 byte vero?
    Ci provo...magari mi guardo il man delle funzioni e come si comportano se hanno in ingresso un u-l-i

    Grazie ancora...ciao ciao!


    P.S. Buona Befana!

  4. #4
    Ok questo è il mio codice, non so se possa dipendere da questo il mio problema:

    codice:
    #include <stdio.h>
    #include <math.h>
    #include <time.h>
    #include <sys\timeb.h>
    
    void main()
    {
    		unsigned long long int n = 0;
    		long int i = 0, j=0;
                 int flag = 0, start = 0, primo = 0;
    		float init,end;
    		float totaltime = 0;
    
    
    		while(1) {
    		
    					i = 2, n = 0, j = 0, flag = 0, start = 1, primo = 1;
    					printf("Inserisci il numero da scomporre : ");
    					scanf("%lld",&n);
    					/* ciclo per trovare un fattore del numero */
    					init = clock();
    					while(i <= sqrt(n))
    					{
    						if( n % i == 0)
    						{
    							primo = 0;
    							j = 2;
    							flag = 1;
    							/* ciclo per trovare se il fattore trovato e’ primo */
    							
    							while( j <= sqrt(i) )
    							{
    								if((i % j) == 0)
    								{
    									flag = 0;
    									j = i; /* per forzare uscita dal ciclo while */
    								}
    								
    								else
    								{
    									flag = 1;
    								}
    								
    								j++;
    							}
    							
    							if(flag == 1) {
    											if(start ==1) {
    															printf("\nI fattori primi del numero %lld sono i seguenti:\n\n", n);
    															start = 0;
    											}
    											
    											printf("%d \n\n",i);
    											
    							}
    
    						}
    							
    							i++;
    							
    					}
    
    					if(primo==1)
    					
    					printf("\nIl numero inserito e' primo, dunque non scomponibile.\n\n", n);
    
    					end = clock();
    
    					totaltime = (end - init)/1000;
    
    					printf("Tempo totale di calcolo = %.3f secondi.\n\n",totaltime);
    				 
    				}
    
    		}
    Son partito dal presupposto che un Unsigned Long Long Int = 8 byte = 64 bit è giusto?

    Ho pensato che il massimo numero possibile da dare come input potesse essere:

    2^64 ---> un numero di 20 cifre

    ma ottengo dei risultati strani già dalla prima stampa...allora ho pensato forse c'è un bit riservato a qualche controllo ed ho provato:

    2^63 ---> un numero di 19 cifre

    stessa cosa...

    Poi in maniera un po' campata per aria ho provato:

    2^63 -1

    in questo caso il calcolo comincia...trova fattori fino a 10 cifre poi il processo torna un errore e tutto si pianta...

    Sapreste dirmi qual è il massimo numero che posso dare in input?


    Grazie!


    P.S. scusate la pessima identazione!!!

  5. #5
    Up :master:

  6. #6
    A me scompone il numero 1234567890123456789 nei suoi fattori in meno di 3 minuti . Nessun errore . Saluti

  7. #7
    A me scompone il numero 1234567890123456789 nei suoi fattori in meno di 3 minuti . Nessun errore . Saluti
    Si anche a me ma vorrei sapere qual è il numero massimo di 19 cifre che posso far inserire dall'utente...

  8. #8
    Con il long usigned int hai a disposizione 32 bit e i valori ammessi sono da 0 a 4294967295
    Eddie 4ever

  9. #9
    Grazie ma mi servirebbe sapere la stessa cosa ma con un long long unsigned int...
    Comunque l'errore che mi salta fuori è dovuto ad una divisione per zero ma non so dove

  10. #10
    Che compilatore usi?
    A me scompone (2^64) (o meglio, dice che è primo) e ha scomposto ((2^64)-1) in 0 secondi (approssimato naturalmente)
    Experience is what you get when you don’t get what you want

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.