Мы можем определить полосу делимости k
числа n
, найдя наименьшее неотрицательное целое число k
, которое n+k
не делится на k+1
.
Вызов
На выбранном вами языке напишите программу или функцию, которая выводит или возвращает полосу делимости вашего ввода.
Примеры:
n=13:
13 is divisible by 1
14 is divisible by 2
15 is divisible by 3
16 is divisible by 4
17 is not divisible by 5
Divisibilty полоса 13
IS4
n=120:
120 is divisible by 1
121 is not divisible by 2
Divisibilty полоса 120
IS1
Тестовые случаи:
n DS
2 1
3 2
4 1
5 2
6 1
7 3
8 1
9 2
10 1
2521 10
Больше тестовых случаев можно найти здесь .
Заметки
- Основано на задаче Эйлера проекта 601
- Эта последовательность может быть найдена в OEIS , смещена вниз на 1.
правила
- Вы можете предположить, что ввод больше 1.
счет
code-golf : выигрывает представление с наименьшим количеством очков.
k + 1
равно 2, гдеk
наименьшее положительное целое число. Простите за придирку.k
которое не делитn-1
?n=7
гдеk=3
:n-1
делится наk
.+1
.Ответы:
Pyth ,
65 байтПопробуйте онлайн!
источник
Java 8,
44424139 байтВычеркнуто 44 все еще регулярно 44; (
-2 байта благодаря @LeakyNun .
-1 байт благодаря @TheLethalCoder .
-2 байта благодаря @Nevay .
Объяснение:
Попробуй это здесь.
источник
Haskell , 35 байт
Попробуйте онлайн!
Использование
until
также 35 байтовисточник
Шелуха , 7 байт
Попробуйте онлайн!
источник
05AB1E ,
76 байтовПопробуйте онлайн!
Альтернативные 7-байтовые решения:
<DLÖγнg
Ls<ÑKн<
источник
JavaScript (ES6), 28 байт
Попробуй это
источник
Mathematica,
3027 байтовБезымянная функция, которая принимает целочисленный аргумент.
Попробуйте на Wolfram Sandbox
Использование:
источник
Perl 5 ,
2321 + 1 (-p) = 22 байтаПопробуйте онлайн!
источник
Python 2 , 35 байт
Попробуйте онлайн!
источник
Cubix , 17 байтов
Попробуйте онлайн!
Cubified
I1
установить стек с вводом и делителем%?
сделать мод и протестировать;)qU)uqU
если 0 удалить результат и увеличить вход и делитель. Немного о пути, чтобы вернуться к%
/;(O@
если не 0, отбросьте результат, уменьшите делитель, выведите и выйдитеСмотреть это беги
источник
Python 2 ,
4341 байтСохранено 2 байта благодаря Leaky Nun !
Попробуйте онлайн!
Python 2 , 40 байт
Попробуйте онлайн!
источник
Python 2 ,
4440 байт-4 байта благодаря Leaky Nun.
Попробуйте онлайн!
источник
Swift 4 , 56 байт
Это полная функция
f
с целочисленным параметром,i
который печатает выходные данные.Попробуй это здесь.
Swift 4 , 56 байт
Это анонимная функция, которая возвращает результат.
Попробуй это здесь.
Проверьте набор тестов!
источник
C # (моно) ,
4139 байтПо сути это порт ответа Java 8 от @Kevin Cruijssen дальнейшими гольф.
Попробуйте онлайн!
источник
постоянный ток , 28 байт
Попробуйте онлайн!
Это кажется действительно неоптимальным, с увеличением и окончательным уменьшением, но я не могу найти способ улучшить это. По сути, мы просто увеличиваем счетчик
i
и наше начальное значение до тех пор, пока значение modi
остается равным нулю, а если это не так, мы вычитаем один изi
и печатаем.источник
Gaia , 8 байт
Попробуйте онлайн!
объяснение
источник
J, 17 байт
Попробуйте онлайн!
Я думаю, что здесь еще есть место для игры в гольф.
Объяснение (без золота)
Функция cap (
[:
) предназначена для того, чтобы J не воспринимал последний глагол ({.@I.
) как часть ловушки.Единственная странная вещь в этом ответе состоит в том, что
I.
фактически дублирует индекс каждого ненулевого числа столько раз, сколько его значение. напримерНо это не имеет значения, так как мы все равно хотим получить первый индекс (и, поскольку он
i.
дает возрастающий диапазон, мы знаем, что первый индекс будет наименьшим значением).Наконец, вот очень короткое доказательство того, что допустимо проверять деление только до
n
.Мы начинаем проверять делимость с
1 | n
, поэтому, предполагая, что полоса зашла так далеко, как только мы доберемся до проверки делимости, которая уn
нас есть,n | 2n - 1
которая никогда не будет истинной (2n - 1 ≡ n - 1 (mod n)
). Поэтому полоса на этом закончится.источник
Japt , 7 байт
Проверьте это онлайн!
источник
Машинный код x86, 16 байт
Вышеуказанная функция принимает один параметр
n
вECX
регистре. Он вычисляет свою полосу делимостиk
и возвращает ее черезEAX
регистр. Соответствует 32-битному соглашению о вызовах fastcall , поэтому его легко вызывать из кода C с использованием компиляторов Microsoft или Gnu.Логика довольно проста: он просто выполняет итеративный тест, начиная с 1. Он функционально идентичен большинству других ответов, но оптимизирован вручную по размеру. Много хороших инструкции 1 байт там, в том числе
INC
,DEC
,CDQ
, иXCHG
. Жестко запрограммированные операнды для деления нас немного ранили, но не сильно.Попробуйте онлайн!
источник
PHP , 34 байта
Попробуйте онлайн!
Достаточно просто. Проверяет остаток от деления (мода) каждого цикла при увеличении каждого значения, выводит, когда число больше не делится.
источник
SOGL V0.12 , 8 байт
Попробуй здесь!
Неплохо для языка, созданного для совершенно другого типа задач.
Объяснение:
источник
Mathematica, 40 байт
Попробуйте онлайн! (Mathics)
Математический подход: n + k делится на k + 1 тогда и только тогда, когда n-1 делится на k + 1. И n-1 не делится на n, поэтому
Range@#
достаточно чисел.Первоначально я намерен использовать
Min@Complement[Range@#,Divisors[#-1]]-1&
, но это также работает.источник
Юлия 0.6.0
(47 байт)(38 байт)n->(i=1;while isinteger(n/i) i+=1;n+=1 end;i-1)
n->(i=1;while n%i<1 i+=1;n+=1end;i-1)
Попробуйте онлайн!
9 байтов было сокращено благодаря Mr.Xcoder
источник
n->(i=1;while isinteger(n/i) i+=1;n+=1end;i-1)
n->(i=1;while n%i<1 i+=1;n+=1end;i-1)
C (gcc) , 34 байта
Попробуйте онлайн!
источник
i--
вместоn=i-1
Пакетная, 70 байт
Все, что он делает, - это находит самое большое
i
, чтоLCM(1..i)
делитn-1
.источник
R , 43 байта
Анонимная функция.
Проверьте все контрольные примеры!
источник
Aceto ,
2827 байтовЯ мог бы сохранить один байт, если мне не нужно выходить.
Объяснение:
Мы используем три стека: левый стек содержит счетчик, начинающийся с 2, правый - заданное число (или его приращения), центральный стек используется для выполнения операций по модулю. Мы могли бы, конечно, делать все в одном стеке, но таким образом мы можем установить внешние стеки как «липкие» (извлекаемые значения на самом деле не удаляются) и избавить себя от множества операций дублирования. Вот метод в деталях:
Прочитайте целое число, увеличьте его, сделайте текущий стек закрепленным и «переместите» его (и нас самих) в стек слева:
Идите еще на один стек влево, вставьте литерал 2, сделайте этот стек тоже липким. Запомните эту позицию в коде (
@
) и снова «переместите» значение и себя в центральный стек.Теперь мы проверяем: не по модулю ли два верхних числа 0? Если это так, перейдите к концу, в противном случае перейдите на одну стопку вправо, увеличьте значение и сдвиньте значение и нас в середину. Затем перейдите к левому стеку, увеличьте его тоже и вернитесь к отметке, которую мы установили ранее.
Когда результат по модулю не был равен нулю, мы инвертируем позицию, по которой движется IP, переходим на один стек влево (где живет наш счетчик), уменьшаем его, выводим значение и затем завершаем работу.
источник
Рубин,
343231 байтРекурсивная лямбда. Все еще новичок в Ruby, поэтому предложения приветствуются!
Попробуйте онлайн!
источник
F #,
86 байтов84 байтаПопробуйте онлайн!
Редактировать: -2 персонажа от Оливера
источник
r = if
?Befunge , 19 байт
Попробуйте онлайн!
источник