Défi
Étant donné un entier positif N
, affichez la somme des premiers N
inverses sous forme de fraction exacte, qui est représentée par une paire d'entiers dans un ordre cohérent représentant le numérateur et le dénominateur.
Règles
La sortie doit être exacte.
La sortie doit être une paire d'entiers dans un ordre cohérent représentant le numérateur et le dénominateur.
L'utilisation de types numériques non entiers (intégrés ou bibliothèque) est interdite.
- Clarification / exception: les types numériques non entiers sont corrects si et seulement si toutes les valeurs utilisées, calculées et retournées sont des entiers (c'est-à-dire que votre langue utilise des nombres rationnels par défaut, mais vous n'utilisez que l'arithmétique entière dans votre réponse)
La sortie doit être aussi réduite que possible. (
3/2
ça va,6/4
non)Les failles standard sont interdites.
Les soumissions doivent fonctionner pour des entrées d'au moins 20, ou cette méta , selon la valeur la plus élevée.
Cas de test
1: 1/1
2: 3/2 (1/1 + 1/2)
3: 11/6 (1/1 + 1/2 + 1/3)
4: 25/12 etc.
5: 137/60
6: 49/20
20: 55835135/15519504
56: 252476961434436524654789/54749786241679275146400
226: 31741146384418617995319820836410246588253008380307063166243468230254437801429301078323028997161/5290225078451893176693594241665890914638817631063334447389979640757204083936351078274058192000
Génération de cas de test (Python 3)
import fractions
def f(x):
return sum(fractions.Fraction(1,i) for i in range(1,x+1))
Semblable à ce défi et à ce défi .
Les numérateurs sont OEIS A001008 et les dénominateurs sont OEIS A002805 .
la source
gcd
une "fonction intégrée" si votre langue le propose?gcd
et les autres fonctions intégrées conviennent. Les types rationnels / fractionnaires ne sont pas autorisés.Réponses:
Python 2 ,
8079 octetsEssayez-le en ligne!
Imprime le numérateur et le dénominateur.
Yay! Prise en charge de MathJax !!!! On observe:
Ensuite, en pensant à la récursivité, pour positif, dans l' umérateur:n
N
et on ne peut s'empêcher de penser à l'n!
D
énominateur récursivement aussi; ainsi le .exec
Nous devons payer le Piper à Fraction Réduite avec un calcul GCD dans la
while
boucle; et puis nous avons terminé.la source
Gelée , 10 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
J , 16 octets
Essayez-le en ligne!
Exécuter des exemples
Comment ça fonctionne
J , 9 octets, en utilisant le type de fraction
Essayez-le en ligne!
J donne des fractions pour la division int-int si non divisible.
la source
2 x:1#.1%1+i.
ce une réponse valable, ou s'agit-il d'une utilisation non valide d'un type rationnel?05AB1E , 10 octets
Essayez-le en ligne!
Utilise la même méthode que toutes les autres entrées. La sortie est dans le formulaire
[denominator, numerator]
.la source
Wolfram Language (Mathematica) , 30 octets
Essayez-le en ligne!
14 octets si les types fractionnaires intégrés sont autorisés
Essayez-le en ligne!
la source
InputForm@HarmonicNumber
(24 octets) donne une sortie au format donné par OP.JavaScript (ES6), 60 octets
Retours
[numerator, denominator]
.Essayez-le en ligne!
Comment?
La méthode est similaire à la réponse Python de @ ChasBrown .
la source
Perl 6 ,
5753 octetsEssayez-le en ligne!
Un bloc de code anonyme qui prend un entier et renvoie un tuple de
denominator, numerator
.Si nous étions autorisés à utiliser des types fractionnaires, ce serait le 32 octets beaucoup plus simple:
Essayez-le en ligne!
la source
Octave , 29 octets
Essayez-le en ligne!
la source
C ++ 17 (gcc) , 108 octets
Utilisez uniquement l'arithmétique entière:
Essayez-le en ligne!
C ++ 17 (gcc) , 108 octets
Essayez-le en ligne!
Comme ci-dessous, mais utilisez C ++ 17
std::gcd
.C ++ (gcc) , 109 octets
Essayez-le en ligne!
Parce que C ++ n'a pas de support natif bigint, cela débordera certainement pour
n>20
.Exiger:
import
.std::__gcd
.-O0
(Je pense que oui) sinon le compilateur optimiserad/=a
.long
.Explication:
a*d
à l'entier le plus proche en convertissanta*d+.5
enlong
et attribuez-le àn
. Maintenant,n/d
c'est la sortie.std::__gcd
.la source
auto a=0.
place dedouble a=0
(1 caractère de moins)?Pari / GP , 34 octets
Essayez-le en ligne!
17 octets si les types fractionnaires intégrés sont autorisés
Essayez-le en ligne!
la source
MATL, 13 octets
Essayez-le sur MATL Online
Même méthode que celle utilisée dans la réponse Jelly de @Dennis .
(Sortie implicite, imprime d'abord le dénominateur puis le numérateur.)
Les imprécisions en virgule flottante signifient que cela ne fonctionne pas pour n = 20, car les valeurs intermédiaires sont trop grandes.On dirait que la sortie du scénario de test était une faute de frappe, cela renvoie la même réponse que les autres réponses pour n = 20.Voici une version préservant le type entier (25 octets) que j'ai essayée entre-temps, avant de le découvrir:
25 octets, entrée jusqu'à 43
Essayez-le en ligne!
Convertit les nombres
uint64
avant d'opérer sur eux, fait l'arithmétique explicitement dans une boucle (sans utiliserprod
ousum
). Plus important encore, divise les numérateurs et dénominateurs partiels par leur GCD à chaque étape du processus, à la fin de chaque itération. Cela augmente la plage d'entrée pour autorisern
jusqu'à 43. Une partie du code est basé sur la réponse Python de @Chas Brown.Méthode alternative (originale) utilisant LCM au lieu de factorielle:
1615 octetsEssayez-le sur MATL Online
la source
Excel VBA, 141 octets
Prend des entrées
[A1]
et des sorties sur la console.Non golfé et commenté
la source
dc , 87 octets
Essayez-le en ligne!
Cela laisse le numérateur et le dénominateur en haut de la pile dans cet ordre, comme le permet cette sortie par défaut. Puisqu'il
dc
n'a pas de fonctiongcd
intégrée, il utilise l' algorithme euclidien pour calculer legcd
.la source
Stax , 11 octets
Exécuter et déboguer
Explication:
Nous voulons calculer:
Nous avons donc:
la source
APL (NARS), 56 caractères, 112 octets
tester:
En quelques mots, réduisez la "fonction somme sur 2 nombres de fractions" (un nombre de fractions est une liste de 2 nombres entiers) sur l'ensemble:
cela ci-dessous semble faux:
mais si je change le type d'entrée alors:
la source
APL (Dyalog Unicode) ,
1512 octetsEssayez-le en ligne!
Fonction tacite, prenant un seul argument
⍵
. Enregistre un octet en supprimant le⌽
si nous sommes autorisés à imprimer le dénominateur en premier.Merci @dzaima pour 3 octets.
Comment:
la source