Вызов
Учитывая положительное целое число N
, выведите сумму первых N
обратных значений в виде точной дроби, которая представлена в виде пары целых чисел в согласованном порядке, представляющем числитель и знаменатель.
правила
Вывод должен быть точным.
Вывод должен быть в виде пары целых чисел в согласованном порядке, представляющем числитель и знаменатель.
Использование нецелых числовых типов (встроенных или библиотечных) запрещено.
- Пояснение / исключение: нецелые числовые типы допустимы, если и только если все используемые, вычисленные и возвращенные значения являются целыми числами (т. Е. Ваш язык использует рациональные числа по умолчанию, но вы используете только целочисленную арифметику в своем ответе)
Вывод должен быть как можно меньше. (
3/2
все в порядке,6/4
нет)Стандартные лазейки запрещены.
Материалы должны работать для входных данных, по крайней мере, до 20, или эта мета , в зависимости от того, что выше.
Тестовые случаи
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
Генерация тест-кейсов (Python 3)
import fractions
def f(x):
return sum(fractions.Fraction(1,i) for i in range(1,x+1))
Похож на этот вызов и этот вызов .
Числителями являются OEIS A001008 , а знаменателями являются OEIS A002805 .
code-golf
math
rational-numbers
pizzapants184
источник
источник
gcd
ли «встроенная функция», если ваш язык обеспечивает ее?gcd
и другие встроенные функции в порядке. Рациональные / дробные типы не допускаются.Ответы:
Python 2 ,
8079 байтПопробуйте онлайн!
Печатает числитель и знаменатель.
Ура! Поддержка MathJax !!!! Один замечает:
Затем, думая о рекурсии, для положительных, в umerator:n
N
и нельзя не думать оn!
D
знаменателе также рекурсивно; таким образом .exec
Мы должны заплатить Пайпер с уменьшенной дробью с помощью вычисления GCD в
while
цикле; и тогда мы закончили.источник
Желе , 10 байт
Попробуйте онлайн!
Как это устроено
источник
J , 16 байт
Попробуйте онлайн!
Выполнить примеры
Как это устроено
J , 9 байт, используя тип дроби
Попробуйте онлайн!
J дает дроби для деления на int-int, если не делится.
источник
2 x:1#.1%1+i.
считаться правильным ответом, или это неправильное использование рационального типа?05AB1E , 10 байтов
Попробуйте онлайн!
Использует тот же метод, что и все остальные записи. Выход в форме
[denominator, numerator]
.источник
Wolfram Language (Mathematica) , 30 байтов
Попробуйте онлайн!
14 байтов, если разрешены встроенные дробные типы
Попробуйте онлайн!
источник
InputForm@HarmonicNumber
(24 байта) дает вывод в формате, заданном OP.JavaScript (ES6), 60 байт
Возвращает
[numerator, denominator]
.Попробуйте онлайн!
Как?
Метод похож на ответ @ ChasBrown's Python .
источник
Perl 6 ,
5753 байтаПопробуйте онлайн!
Блок анонимного кода, который принимает целое число и возвращает кортеж
denominator, numerator
.Если бы нам было разрешено использовать дробные типы, это было бы намного проще 32 байта:
Попробуйте онлайн!
источник
Октава , 29 байт
Попробуйте онлайн!
источник
C ++ 17 (gcc) , 108 байт
Используйте только целочисленную арифметику:
Попробуйте онлайн!
C ++ 17 (gcc) , 108 байт
Попробуйте онлайн!
То же, что и ниже, но используйте C ++ 17
std::gcd
.C ++ (gcc) , 109 байт
Попробуйте онлайн!
Поскольку C ++ не имеет встроенной поддержки bigint, это определенно переполнится
n>20
.Требуется:
import
заявление GCC .std::__gcd
.-O0
(Я так думаю) иначе компилятор будет оптимизированd/=a
.long
.Объяснение:
a*d
до ближайшего целого числа путем литьяa*d+.5
доlong
, и назначьтеn
. Теперьn/d
выходной.std::__gcd
.источник
auto a=0.
вместоdouble a=0
(на 1 символ меньше)?Пари / ГП , 34 байта
Попробуйте онлайн!
17 байт, если разрешены встроенные дробные типы
Попробуйте онлайн!
источник
MATL, 13 байт
Попробуйте это на MATL Online
Тот же метод, который использовался в ответе @Dennis 'Jelly .
(Неявный вывод, сначала печатает знаменатель, а затем числитель.)
Неточности с плавающей точкой означают, что это не работает для n = 20, потому что промежуточные значения слишком велики.Похоже, результат теста был опечаткой, он возвращает тот же ответ, что и остальные ответы для n = 20.Вот целочисленная версия с сохранением типа (25 байт), которую я пробовал за это время, прежде чем выяснить это:
25 байтов, ввод до 43
Попробуйте онлайн!
Приводит числа к,
uint64
прежде чем работать с ними, выполняет арифметику явно в цикле (без использованияprod
илиsum
). Что еще более важно, делит частичные числители и знаменатели на их GCD каждый шаг на пути, в конце каждой итерации. Это увеличивает диапазон вводаn
до 43. Часть кода основана на ответе Python @Chas Brown.Альтернативный (оригинальный) метод с использованием LCM вместо факториала:
1615 байтПопробуйте это на MATL Online
источник
Excel VBA, 141 байт
Принимает ввод
[A1]
и вывод на консоль.Ungolfed и прокомментировал
источник
постоянный ток , 87 байт
Попробуйте онлайн!
Это оставляет числитель и знаменатель на вершине стека в этом порядке, как это разрешено этим выходным значением по умолчанию. Так
dc
как не имеетgcd
встроенного, это использует евклидов алгоритм для вычисленияgcd
.источник
Stax , 11 байт
Запустите и отладьте его
Объяснение:
Мы хотим рассчитать:
Теперь нам нужен знаменательб и список числителей aя :
Мы можем сделатьб = н ! тогда имеем:
Итак, мы имеем:
источник
APL (NARS), 56 символов, 112 байтов
тестовое задание:
В нескольких словах уменьшите «функцию суммы на 2 числа дроби» (одно число дроби - это список из 2 целых чисел) на множестве:
это ниже кажется неправильным:
но если я изменю тип ввода, чем:
источник
APL (Dyalog Unicode) ,
1512 байтПопробуйте онлайн!
Неявная функция, принимающая единственный аргумент
⍵
. Сохраняет байт, удаляя,⌽
если нам разрешено сначала печатать знаменатель.Спасибо @dzaima за 3 байта.
Как:
источник