aquí está mi solución a Project Euler problem #5:¿Es esta solución Project Euler # 5 más eficiente que una conocida?
#include <stdio.h>
#include <stdint.h>
#define N 20
int main(int argc, char* argv[])
{
uint64_t r = 1;
uint64_t i, j;
for(i = 2; i <= N; ++i)
if((j = r%i))
r *= ((i%j) ? i : (i/j));
printf("\n%llu\n", r);
return 0;
}
Es de O eficiencia (n). He revisado algunas páginas del hilo oficial que contiene varias soluciones, pero no anoté ninguna con una eficacia de O (n) o menos. No me sorprendería si simplemente estoy implementando alguna solución conocida, pero si lo estoy, no puedo encontrarla. ¿Pensamientos?
¡Ah, ya veo! Mi algoritmo parece funcionar para los enteros 1-26, pero no 27 y superiores. ¿Sabes por qué es eso? –
@Matt ¿por qué 27 y no 24 o 29? Simplemente suerte :) En cuanto a por qué sucede en general, escribí un poco en mi respuesta. Para algunos (especialmente pequeños) números, su forma de encontrar GCD funcionará. Pero en 'i == 27' falla, atornillando la respuesta para n == 27 y superior (porque construyes la respuesta para _n + 1_ usando una respuesta para _n_). –
@Nikita Simplemente curioso, ¿qué tiempo de ejecución tomó su programa para calcular 27? –