Если 1 не считается фактором, то
- 40 имеет два соседних фактора (4 и 5)
- 1092 имеет два соседних фактора (13 и 14)
- 350 не имеет двух соседних факторов (из его факторов 2, 5, 7, 10, 14, 25, 35, 50, 70 и 175 нет двух последовательных)
Доля положительных целых чисел, обладающих этим свойством, представляет собой долю, кратную любому из 6 (2 × 3), 12 (3 × 4), 20 (4 × 5), 30, 56,…. Если мы рассчитаем только долю, делимую на первые n из них, мы получим приближение, которое становится более точным при увеличении n .
Например, для n = 1 мы находим долю целых чисел, делимых на 2 × 3 = 6, что составляет 1/6. При n = 2 все целые числа, кратные 3 × 4 = 12, также делятся на 6, поэтому аппроксимация все еще равна 1/6. Для n = 3 доля целых чисел, делимых на 6 или 20, составляет 1/5 и т. Д.
Вот первые несколько значений:
1 1/6 0.16666666666666666
3 1/5 0.20000000000000000
6 22/105 0.20952380952380953
9 491/2310 0.21255411255411255
12 2153/10010 0.21508491508491510
15 36887/170170 0.21676558735382265
21 65563/301070 0.21776663234463747
24 853883/3913910 0.21816623274423785
27 24796879/113503390 0.21846817967287144
Для значений n между предоставленными значениями выходные данные должны совпадать с выходными данными для вышеуказанного значения (например, n = 5 → 1/5).
Ваша программа должна взять n и вывести либо дробный, либо десятичный ответ. Вы можете взять n с любым смещением (например, 0-индексация или 2-индексация в этой последовательности вместо 1-индексации).
Для десятичного вывода ваша программа должна содержать не менее 5 цифр для всех приведенных тестовых случаев.
Скоринг - это код-гольф с самой короткой победой.
Вдохновленный Какая доля натуральных чисел имеет два фактора, которые отличаются на 1? по Marty Cohen - в частности, от Dan ответа «s.
Ответы:
Желе ,
14 1310 байт-1 используя идею Эрика Outgolfer, чтобы взять среднее значение из списка нулей и единиц.
-3 с помощью 3-индексирования (как разрешено в вопросе) - спасибо Деннису за указание на это.
Монадическая ссылка, принимающая целое число
n+2
, которое дает число с плавающей точкой.(Начинается как
+2µḊPƝḍⱮ!§T,$Ẉ
, принимаяn
и уступая[numerator, denominator]
, не сводится)Как?
источник
!
вместоæl/
... Ах, радости изменения правил во время сна.P
чтобы получить до 13?Ẹ€
? Боюсь,P
это то же самое׃1$
, что не получится. (И это все равно будет 14 ...) Если вместоæl/
, может быть (P
это LCM * k в конце концов).æl/
æl/
я думаю. (У ночной совы есть проблемы ...) РЕДАКТИРОВАТЬ: Да, хотя мне придется сократить спор по поводу TIO до4
...: P05AB1E , 15 байтов
Порт @JonathanAllan 's Jelly ответа , поэтому тоже очень медленно.
Попробуйте онлайн или проверьте первые три контрольных примера .
Объяснение:
источник
JavaScript (ES6),
94 9290 байтСохранено 2 байта благодаря @Shaggy + еще 2 байта оттуда
Возвращает десятичное приближение.
Попробуйте онлайн!
JavaScript (ES6), 131 байт
Попробуйте онлайн!
источник
Желе , 12 байт
Попробуйте онлайн!
-2 благодаря предложению Джонатана Аллана заменить LCM продуктом (то есть LCM, умноженным на целое число).
Деннис заметил, что я тоже могу 2-х индексный.
источник
Древесный уголь , 26 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Безнадежно неэффективно (O (n! ²)), поэтому работает только до
n=4
TIO. Объяснение:Введите
n
и рассчитайте первыеn
произведения соседних факторов.Возьмите произведение всех этих факторов и используйте его для расчета доли чисел, имеющих хотя бы один из этих факторов.
30-байтовая менее медленная версия - только O (n!), Так что можно использовать до
n=6
TIO:Попробуйте онлайн! Ссылка на подробную версию кода.
46-байтная более быстрая версия - только O (lcm (1..n + 2)), поэтому можно использовать доn=10
TIO:Попробуйте онлайн! Ссылка на подробную версию кода.45-байтная более быстрая версия - только O (2ⁿ), поэтому можно использовать до
n=13
TIO:Попробуйте онлайн! Ссылка на подробную версию кода.
Самая быстрая версия с 54 байтами использует более эффективный LCM, поэтому может работать до
n=18
TIO:Попробуйте онлайн! Ссылка на подробную версию кода.
источник
Wolfram Language (Mathematica) ,
69686152 байтаПопробуйте онлайн!
3-индексироваться. Сначала я собирался использовать,
LCM@@
но понял, что#!
будет короче ... но теперь это много памяти дляRange[#!]
...Удалось поиграть в гольф на 2 байта, что было приятно.
Старое численное решение (56 байт):
Попробуйте онлайн!
2-индексироваться. Более эффективно, когда
#!>5^8
( при#>9
условии, что#
это целое число).источник
Python 2 , 78 байт
Попробуйте онлайн!
Возвращает приблизительное десятичное число до +5 цифр; использует наивный подход грубой силы, который предлагает xnor в комментариях к вопросу.
источник