Temos um número de ponto flutuante rentre 0 e 1 e um número inteiro p.
Encontre a fração de números inteiros com o menor denominador, que se aproxima rcom pelo menos pprecisão de dois dígitos.
- Entradas:
r(um número de ponto flutuante) ep(inteiro). - Saídas:
aebinteiros, em quea/b(flutuante) aproxima-seraté ospdígitos.bé o menor número inteiro positivo possível.
Por exemplo:
- se
r=0.14159265358979ep=9, - então o resultado é
a=4687eb=33102, - porque
4687/33102=0.1415926530119026.
Qualquer solução precisa funcionar em teoria com tipos de precisão arbitrária, mas as limitações causadas pelos tipos de precisão fixa das implementações não importam.
Precisão significa o número de dígitos após " 0." dentro r. Assim, se r=0.0123e p=3, então, a/bdeve começar com 0.012. Se os primeiros pdígitos da parte fracionária de rforem 0, o comportamento indefinido será aceitável.
Critérios de vitória:
- O algoritmo algoritmicamente mais rápido vence. A velocidade é medida em O (p).
- Se houver vários algoritmos mais rápidos, os ganhos mais curtos.
- Minha própria resposta está excluída do conjunto dos possíveis vencedores.
Ps a parte de matemática é realmente muito mais fácil, ao que parece, sugiro ler este post.
padEndematch? Você não pode apenasslicecada corda no comprimento correto e depois subtraí-las?