Tenemos un número de coma flotante rentre 0 y 1, y un número entero p.
Encuentre la fracción de enteros con el mínimo denominador, que se aproxima rcon al menos pprecisión de dígitos.
- Entradas:
r(un número de coma flotante) yp(entero). - Salidas:
aybenteros, dondea/b(como flotante) se aproximarhasta lospdígitos.bes el menor entero positivo posible más pequeño.
Por ejemplo:
- si
r=0.14159265358979yp=9, - entonces el resultado es
a=4687yb=33102, - debido
4687/33102=0.1415926530119026.
Cualquier solución tiene que funcionar en teoría con tipos de precisión arbitraria, pero las limitaciones causadas por los tipos de precisión fija de las implementaciones no importan.
Precisión significa el número de dígitos después de " 0." en r. Por lo tanto, si r=0.0123y p=3, entonces a/bdebería comenzar con 0.012. Si los primeros pdígitos de la parte fraccional de rson 0, el comportamiento indefinido es aceptable.
Criterio de victoria:
- El algoritmo algorítmicamente más rápido gana. La velocidad se mide en O (p).
- Si hay varios algoritmos más rápidos, entonces gana el más corto.
- Mi propia respuesta está excluida del conjunto de posibles ganadores.
PD: la parte de matemáticas es en realidad mucho más fácil de lo que parece, sugiero leer esta publicación.
padEndymatch? ¿No puede simplementeslicecada cadena a la longitud correcta y luego restarlas?