задача
По заданным целым числам x
и y
обоим по крайней мере 2
найдите наименьшее положительное число,y
-я степень делится на x
.
пример
Учитывая x=96
и y=2
, выход должен быть, 24
так как 24
является наименьшим положительным n
удовлетворяющимn^2 is divisible by 96
.
Testcases
x y output
26 2 26
96 2 24
32 3 4
64 9 2
27 3 3
счет
Это код-гольф . Решение с самым низким числом байтов выигрывает.
Ссылки
y=2
: OEIS A019554y=3
: OEIS A019555y=4
: OEIS A053166y=5
: OEIS A015052y=6
: OEIS A015054
X
всегда быть больше , чемY
?X
меньшеY
, и он может уменьшить длину некоторых ответов (по крайней мере, моих), еслиX
всегда больше, чемY
. Я бы предпочел, чтобыX
это было больше или меньше, но тогда был бы хорош один контрольный пример для последнего.Ответы:
Брахилог ,
1917161512 байт2 байта сохранены благодаря @LeakyNun.
Попробуйте онлайн!
объяснение
источник
Желе , 6 байт
Попробуйте онлайн! или проверьте все тестовые случаи .
Как это устроено
источник
R*%⁸i0
также 6 байтов.JavaScript (ES7), 32 байта
источник
f
. Я думаю, что вам нужно назначить функциюf
.Желе , 6 байт
Попробуйте онлайн! или проверьте все контрольные примеры .
Как это устроено
источник
Python 3,
604339 байтСпасибо @LeakyNun и @ Sp3000 за помощь
Функция, которая принимает входные данные через аргумент и возвращает выходные данные.
Как это устроено
Функция использует рекурсию для многократной проверки целых чисел
i
, начиная сi=1
тех пор, пока неi**y%x<1
будет найдено одно, удовлетворяющее требуемому условию . Это достигается путем принятия логическогоor
условия и результата выражения дляi+1
приращения, которое здесь есть-~f(x,y,i+1)
. Это выражение непрерывно оцениваетсяFalse
до тех пор, пока неj
будет найдено удовлетворительное значение , и в этот момент оно оценивается,True
и рекурсия останавливается. Так как они соответственно эквивалентны0
и1
в Python, и функция неоднократно добавлялась1
через увеличивающуюся часть, функция возвращает(j-1)*False + True + (j-1)*1 = (j-1)*0 + 1 + (j-1)*1 = 1 + j-1 = j
, как требуется.Попробуйте это на Ideone
источник
def f(x,y,i=1):¶ while i**y%x:i+=1¶ print(i)
f=lambda x,y,z=1:z**y%x<1or-~f(x,y,z+1)
True
вместоz
?-~
часть, но да, она вернуласьTrue
бы, если быx
была 1.Haskell, 31 байт
Пример использования:
96#2
->24
.Прямая реализация: попробуйте все целые числа
n
, оставьте те, которые удовлетворяют условию, и выберите первое.источник
x#y=until(\n->mod(n^y)x<1)(+1)0
05AB1E (10 байт)
Попробуйте онлайн
>
Читает первый аргумент, увеличивает его и помещает в стекG
выталкивает стек (a
) и запускает цикл, содержащий остальную часть программы, гдеN
принимает значение1, 2, ... a - 1
.N²m
толкаетN
и вторую запись из истории ввода, затем выталкивает их обоих и толкает первую во власть второй.¹
помещает первую запись из истории ввода в стек.Ö
выскакивает две предыдущие записи в стеке, а затем помещает ихa % b == 0
в стек.i
выталкивает это из стека. Если true, он выполняет остальную часть программы; в противном случае цикл продолжается.N
толкаетN
в стек.q
завершает программуКогда программа завершается, печатается верхнее значение стека.
источник
MATL , 9 байт
Попробуйте онлайн!
объяснение
источник
find
?f
но это находит все ненулевые индексы. Так что должно было бы быть~f1)
: negatve, найти, получить первую записьНа самом деле ,
1211 байтовБольшое спасибо Лики Нун за его многочисленные предложения. Предложения по игре в гольф приветствуются. Попробуйте онлайн!
Оригинальный 12-байтовый подход. Попробуйте онлайн!
Еще один 12-байтовый подход. Попробуйте онлайн!
13-байтовый подход. Попробуйте онлайн!
Ungolfing:
Первый алгоритм
Оригинальный алгоритм
Третий алгоритм
Четвертый алгоритм
источник
;)
R,
61 байт,39 байт,37 байт, 34 байтаЯ все еще новичок в программировании на R, и оказывается, что это моя первая функция, которую я создаю в R ( Yay! ), Поэтому я считаю, что еще есть возможности для совершенствования.
Онлайн-тест можно провести здесь: RStudio на rollApp .
Основные успехи:
which.max
работает, потому что он возвращает самое высокое значение в векторе, и если есть несколько, он вернет первое. В этом случае у нас есть вектор из множества FALSE (которые равны 0) и нескольких TRUE (которые равны 1), поэтому он вернет первое значение TRUE.Еще один прогресс:
Наконец, он отбивает ответ, используя Python, двумя байтами. :)
Еще один прогресс: (снова!)
Большое спасибо Axeman и user5957401 за помощь.
источник
which.min
, вы можете избавиться от==0
. Модуль вернет число, которое будет не ниже 0.function(x,y)which(!(1:x)^y%%x)[1]
.Округ Колумбия,
2322 байтаСпасибо Делиоту за совет о методах ввода, сохраняющий байт
Использует оператор глубины стека
z
для приращения тестового примера непосредственно в стеке и оператор модульного возведения в степень|
для, ну, в общем, модульного возведения в степень. Повторяйте тестирование, пока остаток не станет больше нуля.источник
?
в начале, так как стандартный способ вызвать некоторые вещи> echo "x y [program]"|dc
, гдеx
иy
такие же, как Вопрос-х и у будет сброшен в стек, как обычно.-e
опцию, но теперь буду использовать ее."
это не реализовано, вdc
то время как использование кавычек, очевидно, приводит к ошибкам оболочки. Есть ли что-нибудь сделать по этому поводу? Я знаю, чтоstderr
можно игнорировать, но это все еще беспокоит меня.05AB1E , 8 байтов
объяснение
Попробуйте онлайн
источник
Perl 6 ,
2625 байтОбъяснение:
источник
Mathematica, 36 байт
источник
Дьялог АПЛ , 11 байт
Перевод этого .
0⍳⍨
найти первый ноль в остатках⊣|
от деления, когда х делит(⍳⊣)*
целые числа от одного до х , возведенные в степень⊢
уПопробуй APL онлайн!
источник
PowerShell v2 +, 48 байт
Принимает участие
$x
и$y
. Создает диапазон от1
до$x
, а затем используетWhere-Object
для фильтрации этих чисел. Фильтр берет строку"$_*"
(т. Е. Текущее число со звездочкой) и использует умножение строк для объединения этих$y
времен, затем привязывает финал1
в конце, а затем передает егоiex
(сокращениеInvoke-Expression
или аналогичноeval
). Это занимает место[math]::Pow($_,$y)
, поскольку PowerShell не имеет оператора возведения в степень и на два байта короче. Это подается в оператор по модулю%
с$x
- таким образом, если это делится, это будет0
, поэтому мы инкапсулируем это в паренсы и принимаем логическое-не!(...)
его. Таким образом, если его делят, он будет включен этим фильтром, а все остальные числа будут исключены.Наконец, мы инкапсулируем результирующие числа в парены
(...)
и берем[0]
индекс. Поскольку введенный диапазон отсортирован1..$x
, он будет наименьшим. Это осталось на конвейере и печать неявная.Контрольные примеры
источник
PHP,
5533 байтаисточник
Perl,
2926 байтВключает +3 для
-p
(не +1, поскольку код содержит'
)Запустить с вводом на STDIN
power.pl
:источник
Pyth, 9 байт
Программа, которая принимает ввод списка формы
[x, y]
в STDIN и печатает результат.Попробуйте онлайн
Как это устроено
источник
PHP 59 байт
Извините, но я не могу проверить это с моего мобильного. :)
Golfed
источник