Nous avons un nombre à virgule flottante rentre 0 et 1 et un entier p.
Trouvez la fraction d'entiers avec le plus petit dénominateur, qui se rapproche ravec une pprécision d' au moins chiffres.
- Entrées:
r(un nombre à virgule flottante) etp(entier). - Sorties:
aetbentiers, oùa/b(flottant) se rapprocherjusqu'auxpchiffres.best le plus petit entier positif possible.
Par exemple:
- si
r=0.14159265358979etp=9, - alors le résultat est
a=4687etb=33102, - parce que
4687/33102=0.1415926530119026.
Toute solution doit fonctionner en théorie avec des types à précision arbitraire, mais les limitations causées par les types à précision fixe des implémentations n'ont pas d'importance.
La précision signifie le nombre de chiffres après " 0." dans r. Ainsi, si r=0.0123et p=3, alors a/bdevrait commencer par 0.012. Si les premiers pchiffres de la partie fractionnaire de rsont 0, un comportement non défini est acceptable.
Critères de victoire:
- L'algorithme algorithmiquement le plus rapide gagne. La vitesse est mesurée en O (p).
- S'il existe plusieurs algorithmes les plus rapides, le plus court l'emporte.
- Ma propre réponse est exclue de l'ensemble des gagnants possibles.
Ps la partie mathématique est en fait beaucoup plus facile qu'il n'y paraît, je vous suggère de lire ce post.
padEndetmatch? Vous ne pouvez pas simplementslicechaque chaîne à la bonne longueur, puis les soustraire?