#include #include #include #define LIMIT 50000 int primosmenores(unsigned int numero, unsigned int primos[]); int esprimo(unsigned int numero); int factorizar(unsigned int numero, unsigned int factores[]); void main() { int i, ii, cantdivisores, cantprimos; unsigned int numero, factores[LIMIT]; // cantprimos = factorizar(7320,factores); numero = 0; for (i = 1; cantdivisores != 500; i++) { for (ii = 0; ii < LIMIT; ii++) { factores[ii] = 0; } cantdivisores = 1; numero += i; printf("El numero %d es el %d numero triangulo\n", numero,i); cantprimos = factorizar(numero,factores); for (ii = 0; ii < cantprimos; ii++) { while ((factores[ii] == 0) && (ii < cantprimos)) { ii++; } // printf("El factor numero %d es %d\n",i,factores[i]); cantdivisores = cantdivisores*(factores[ii]+1); } printf("El numero %d tiene %d divisores\n", numero, cantdivisores); } printf("El numero es %d\n", numero); } int primosmenores(unsigned int numero, unsigned int primos[]) { int i, ii; for (i = 0; i < LIMIT; i++) { primos[i] = 0; } for ((i = 1) && (ii = 0); i <= (numero/2); i++) { if (esprimo(i) == 1) { primos[ii] = i; ii++; } } return ii; } int esprimo(unsigned int numero) { int r,f; if (numero == 1) { return 0; } else if (numero < 4) { return 1; } else if ((numero % 2) == 0) { return 0; } else if (numero < 9) { return 1; } else if ((numero % 3) == 0) { return 0; } else { r = floor(sqrt(numero)); f = 5; while (f <= r) { if ((numero % f) == 0) { return 0; } if ((numero % (f+2) == 0)) { return 0; } f += 6; } return 1; } } int factorizar(unsigned int numero, unsigned int factores[]) { int i, ii, primes[LIMIT], cantprimos; cantprimos = primosmenores(numero,primes); /* for (i = 0; i < cantprimos; i++) { printf("%d es primo.\n", primes[i]); } */// printf("Hay %d primos\n",cantprimos); // printf("We're going in\n"); for (i = 0; i < cantprimos; ++i) { // printf("We're in!\n"); while ((numero != 1) && ((numero % primes[i]) == 0)) { // printf("Estamos en el while con %d y %d\n",primes[i],numero); numero = numero / primes[i]; // printf("Numero ahora vale %d\n",numero); factores[i+1] += 1; } // printf("Salimos del while!\n"); } /* for (i = 0; i < cantprimos; ++i) { printf("%d ", factores[i]); } */ return cantprimos; }