Cita de: kutcher en 3 Septiembre 2014, 02:06 AM
La verdad no entendí mucho, por otro lado hice una función pow que solo trabaja con enteros pensé que de esta manera podría ser mas rápida pero no:Código (cpp) [Seleccionar]int pow2(int x, int n)
{
int p;
for ( p = 1 ; n > 0 ; --n )
p *= x;
return p;
}
Saludos kutcher
La librería estándar ha sido programada y optimizada por gente bastante ducha tanto en matemáticas como en programación... es complicado sacar una versión que sea más eficiente (no es imposible pero...)
En cualquier caso yo creo que puedes optimizar la función "arrastrando" el valor de "end", de esta forma sólo llamas a pow una vez durante la ejecución de la función.
Código (c) [Seleccionar]
void bruteforce(int inc, int fin, char *rotation)
{
int i = 0, j, len = strlen(rotation);
long int r = 0, c;
char test[200];
long int end = (long int)pow( len, inc );
for(j = inc; j < fin+1; j++)
{
r = 0;
end *= len;
while(r != end)
{
c = r;
while(i < j)
{
test[i] = rotation[c % len];
c = (long int)c / len;
i++;
}
test[i] = '\0';
puts(test);
i = 0;
r++;
}
}
}