#include #include "cabecera.h" extern GArray *primos; gint max_primo; extern gint num_primos; gboolean primo=TRUE; extern GArray *factores; extern GArray *bases; extern GArray *exponentes; extern gint num_factores, num_bases; void crea_arrays () { gint temp=0; factores = g_array_new (TRUE, FALSE, sizeof (gint)); bases = g_array_new (TRUE, FALSE, sizeof (gint)); exponentes = g_array_new (TRUE, FALSE, sizeof (gint)); g_array_append_val (factores, temp); g_array_append_val (bases, temp); g_array_append_val (exponentes, temp); } void bases_exponentes() { gint i, temp; for (i=1; i<=num_factores; i++) if (g_array_index(factores, gint, i) != g_array_index(factores, gint, i-1)) { temp=g_array_index(factores, gint, i); g_array_append_val (bases, temp); num_bases++; temp=1; g_array_append_val (exponentes, temp); } else { temp = g_array_index(exponentes, gint, num_bases); temp++; g_array_remove_index (exponentes, num_bases); g_array_append_val (exponentes, temp); } } void crea_array_de_primos () { gint temp=0; primos = g_array_new (TRUE, FALSE, sizeof (gint)); g_array_append_val (primos, temp); temp=2; g_array_append_val (primos, temp); } gboolean es_primo(gint numero) { primo=TRUE; gint k; for (k=1; k<=num_primos; k++) if (numero%g_array_index(primos, gint, k)==0) return FALSE; return primo; } void lista_primos (gint numero) { max_primo=2; num_primos=1; gint i; gboolean primera_vez=TRUE; if (primera_vez==FALSE) { g_array_free (primos,TRUE); g_array_free (factores,TRUE); g_array_free (bases,TRUE); g_array_free (exponentes,TRUE); } primera_vez=FALSE; crea_array_de_primos (); for (i=3; i<=numero; i++) if (es_primo(i)) { g_array_append_val (primos, i); max_primo=i; num_primos=num_primos+1; } } int num_digitos(int entero) { if (entero>9999) return 5; else if (entero>999) return 4; else if (entero>99) return 3; else if (entero>9) return 2; else return 1; }