factorizar todos los números en el rango de 1 a 10 . Usando una modificación de un Tamiz de Eratóstenes, puede factorizar todos los números del 1 al n
en O(n*log n)
vez (creo que es un poco mejor, O(n*(log log n)²)
más o menos) usando el espacio O(n*log log n)
. Mejor que eso, probablemente esté creando una matriz de los factores primos más pequeños.
// Not very optimised, one could easily leave out the even numbers, or also the multiples of 3
// to reduce space usage and computation time
int *spf_sieve = malloc((limit+1)*sizeof *spf_sieve);
int root = (int)sqrt(limit);
for(i = 1; i <= limit; ++i) {
spf_sieve[i] = i;
}
for(i = 4; i <= limit; i += 2) {
spf_sieve[i] = 2;
}
for(i = 3; i <= root; i += 2) {
if(spf_sieve[i] == i) {
for(j = i*i, step = 2*i; j <= limit; j += step) {
if (spf_sieve[j] == j) {
spf_sieve[j] = i;
}
}
}
}
factorizar un número n > 1
usando ese tamiz, buscar su pequeño factor primordial p
, determinar su multiplicidad en la factorización de n
(ya sea por buscar de forma recursiva, o simplemente dividiendo hasta p
no lo hace de manera uniforme brecha el cofactor restante, que es más rápido depende) y el cofactor. Mientras que el cofactor es mayor que 1, busca el siguiente factor primo y repite.
crear un mapa a partir de los números primos de números enteros
ir a través de ambas matrices, para cada número en N
, agregue el exponente de cada primo en su factorización al valor en el mapa, por los números en D
, restar.
pasar por el mapa, si el exponente del primer es positivo, introduzca p^exponent
a la matriz N
(puede que tenga que dividir que la mayoría de los índices si el exponente es demasiado grande, y para valores pequeños, combinar varios números primos en una entrada - hay números primos 664579 menores que 10 , así que las 100,000 ranuras en las matrices pueden no ser suficientes para almacenar cada primo que aparece con la potencia correcta), si el exponente es negativo, haga lo mismo con la matriz D
, si es 0, ignora ese primo.
Cualquier ranura no utilizada en N
o D
se establece en 1.
http://stackoverflow.com/questions/12359785/reducing -integer-fractions-algorithm-solution-explanation –
No estoy seguro de por qué ha publicado una pregunta con un enlace a la respuesta. –
@RaymondChen: No tenía el código de la solución cuando publiqué la pregunta, y no entendí el código de la solución cuando lo recibí, por lo que publiqué una pregunta separada para la explicación y las interrelacioné. –