Определение
- Два целых числа взаимно просты, если они не имеют общих положительных делителей, кроме
1
. a(1) = 1
a(2) = 2
a(n)
наименьшее целое положительное число , которое копростое кa(n-1)
иa(n-2)
и еще не появилось, для целого числаn >= 3
.
задача
- Учитывая положительное целое число
n
, вывод / печатьa(n)
.
пример
a(11) = 6
потому что6
взаимно прост с последними двумя предшественниками (а именно,11
и13
) и6
не появился раньше.
Ноты
- Обратите внимание, что последовательность не является возрастающей, что означает, что элемент может быть меньше, чем его предшественник.
Спекуляции
- Вы должны использовать 1-индексированный.
Testcases
n a(n)
1 1
2 2
3 3
4 5
5 4
6 7
7 9
8 8
9 11
10 13
11 6
12 17
13 19
14 10
15 21
16 23
17 16
18 15
19 29
20 14
100 139
1000 1355
10000 13387
100000 133361
счет
- Поскольку взаимно простое означает, что эти два числа имеют только один делитель (
1
) и1
является небольшим числом, ваш код должен быть как можно меньше с точки зрения количества байтов.
Ссылки
- OEIS A084937
code-golf
sequence
number-theory
Дрянная Монахиня
источник
источник
Ответы:
Python 3.5,
160141126124121109 байтЭто простая реализация определения последовательности. Предложения по игре в гольф приветствуются.
Изменить: -17 байт благодаря Leaky Nun. -9 байт благодаря Питеру Тейлору. -6 байт благодаря Sp3000 и переходу на Python 3.5.
Ungolfing:
источник
import math
онg=math.gcd
должен быть короче, чем определение вашего собственногоg
. Для до 3.5 вы можете сделатьfrom fractions import*
дляgcd
.c=3
внутри цикла, вам нужно сделать это только один раз. По моим подсчетам вы экономите 3 символа.r=[c]+r
вместо+=
, но три отрицательных индекса становятся положительными. И еще есть 2-символьная экономия от перезаписи как лямбды, хотя это довольно радикальное изменение:from fractions import*;F=lambda n,r=[2,1],c=3:n<2and r[1]or(c in r)+gcd(r[0]*r[1],c)<2and F(n-1,[c]+r)or F(n,r,c+1)
и не нужно,print
потому что это больше не полная программа.MATL ,
2827 байтКод медленный, но дает правильный результат.
Попробуйте онлайн! Или проверьте первые десять случаев .
Небольшая модификация кода создает график последовательности:
Рассматривайте это как искусство ASCII или с графическим выводом в автономном компиляторе:
объяснение
источник
C 185 байтов
источник
На самом деле ,
383735333130 байтЭто простая реализация определения функции. Предложения по игре в гольф приветствуются. Попробуйте онлайн!
Изменить: -3 байта благодаря Leaky Nun.
Ungolfing:
источник
Haskell,
8173 байтаПример использования:
((0:1:c[2,1])!!) 12
->17
.Создайте список всего
a(n)
, начиная с0
исправления индекса на основе 11
и затемc[2,1]
.c
занимает заголовок списка аргументов,l
за которым следует рекурсивный вызов с последующим добавлением следующего номера (совмещенный, не замеченный ранее)l
. Выберитеn
й элемент этого списка.источник
R, 141 байт
ungolfed
источник
Mathematica,
9790 байтИсходя из
моей догадки, чтоa(n) < 2n
для всехn
.Чтобы ускорить запуск, добавьте
a@n=
после оригинала,:=
чтобы функции не нужно было пересчитывать предыдущие значения .Сохранено 7 байт благодаря Sherlock9 (если
gcd(a,b)=1
потомgcd(ab,m) = gcd(a,m)*gcd(b,m)
)источник
ABS(a(n)-n) < n
"n
.Pyth, 23 байта
Тестирование
Довольно простая реализация, но с некоторыми приятными уловками игры в гольф.
источник