Desafio
Dado um número inteiro positivo N
, produza a soma dos primeiros N
recíprocos como uma fração exata, que é representada como um par de números inteiros em uma ordem consistente, representando numerador e denominador.
Regras
A saída deve ser exata.
A saída deve ser como um par de números inteiros em uma ordem consistente, representando numerador e denominador.
É proibido o uso de tipos numéricos não inteiros (integrados ou biblioteca).
- Esclarecimento / exceção: tipos numéricos não inteiros são válidos se, e somente se, todos os valores usados, computados e retornados forem números inteiros (por exemplo, seu idioma usa números racionais por padrão, mas você só usa aritmética inteira em sua resposta)
A saída deve ser o mais reduzida possível. (
3/2
está tudo bem,6/4
não está)As brechas padrão são proibidas.
Os envios devem funcionar para entradas de no mínimo 20, ou essa meta , o que for maior.
Casos de teste
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
Geração de casos de teste (Python 3)
import fractions
def f(x):
return sum(fractions.Fraction(1,i) for i in range(1,x+1))
Semelhante a este desafio e este desafio .
Os numeradores são OEIS A001008 e os denominadores são OEIS A002805 .
gcd
uma "função interna" se o seu idioma fornecer?
gcd
e outras funções internas estão bem. Tipos racionais / fracionários não são permitidos.