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!!!