Задний план:
Текущая задача «Совершенные числа» довольно ошибочна и сложна, поскольку она требует, чтобы вы выводили в сложном формате, включающем факторы числа. Это сугубо решение проблемы с перепостом задачи.
Вызов
Учитывая положительное целое число в любом стандартном формате ввода , различайте, является ли оно идеальным или нет.
Совершенное число - это число, равное сумме всех его собственных делителей (его положительных делителей меньше, чем самого себя). Например, - идеальное число, поскольку его делители равны , что в сумме составляет , а - не идеальное число, поскольку его делители ( ) суммируют до , а не .
Тестовые случаи:
Imperfect:
1,12,13,18,20,1000,33550335
Perfect:
6,28,496,8128,33550336,8589869056
правила
- Ваша программа не должна выполнять большие тестовые случаи, если есть ограничения памяти или времени, но она должна быть теоретически способна, если бы ей дали больше памяти / времени.
- Выходными данными могут быть два разных и непротиворечивых значения в любом допустимом выходном формате . Если сразу неясно, что представляет собой Совершенство / Несовершенство, обязательно укажите в своем ответе.
1
будет идеальным, поскольку каждое число делится1
само по себе. Сумма собственных делителей1
является0
Ответы:
Брахилог , 4 байта
Попробуйте онлайн!
Предикат успешно выполняется для идеальных входных данных и не подходит для несовершенных входных данных, печати
true.
илиfalse.
запуска в качестве законченной программы (за исключением последнего контрольного примера, который занимает больше минуты в TIO).источник
fk
: хНейм , 3 байта
Попробуйте онлайн!
(На самом деле я не знаю, как выполнить все тестовые примеры одновременно, так как я начал изучать Neim около пятнадцати минут назад, но я проверял их по отдельности.)
Отпечатки 0 для несовершенных, 1 для совершенных.
источник
𝔼
1 байт? Neim использует только 128 таких нестандартных символов?R ,
3329 байтПопробуйте онлайн!
Возвращает
TRUE
за идеальные числа иFALSE
за несовершенные.источник
0
(идеально)FALSE
и ненулевые,TRUE
но я удалил один из них, чтобы изменить отображение. Это полезный трюк , чтобы играть в гольф гипсе отnumeric
доlogical
, часто в сочетании сwhich
или[
.Желе , 3 байта
Попробуйте онлайн!
источник
Japt
-!
, 4 байтаПо какой-то причине
¦
не работает на TIO, поэтому мне нужно использовать-!
флаг и¥
вместоПопробуйте онлайн!
источник
U
не получает автоматически вставляется перед!
.Python 3 , 46 байт
Попробуйте онлайн!
Грубая сила, суммирует факторы и проверяет равенство.
источник
lambda x:sum(i for i in range(1,x)if x%i<1)^x
должно сработать.Python , 45 байт
True
для идеального;False
для других (переключите это с помощью==
->!=
)Попробуйте онлайн!
44 4241 байт (-2 благодаря ovs), если мы можем вывести, используя «истинный против фальси»:(falsey (
0
)) для идеального; истинный (ненулевое целое) в противном случаеисточник
Октава , 25 байт
Попробуйте онлайн!
объяснение
источник
JavaScript, 38 байт
Попробуйте онлайн!
(Тайм-аут последнего теста на TIO.)
источник
f=
после преобразования из рекурсивной функции.C # (интерактивный компилятор Visual C #) , 46 байт
Возвращает 0, если идеально, в противном случае возвращает положительное число. Я не знаю, допускается ли вывод различных типов целых чисел вместо двух разных значений истина и ложь, и я не смог найти никакого обсуждения мета об этом. Если это неверно, я удалю его.
Попробуйте онлайн!
C # (интерактивный компилятор Visual C #) ,
4947 байтПопробуйте онлайн!
источник
Рубин , 33 байта
Попробуйте онлайн!
источник
TI-BASIC (TI-84),
3023 байтаУжасно неэффективно, но это работает.Сокращение bytecount значительно ускорило программу.
Вход находится в
Ans
.Выход находится
Ans
и автоматически распечатывается после завершения программы.Объяснение:
(TI-BASIC не имеет комментариев, поэтому просто предположите, что
;
это комментирует)Пример:
Примечание. Счетчик байтов программы оценивается с использованием значения в [MEM] > [2] > [7] (36 байт) с последующим вычитанием длины имени программы
CDGF2
(5 байт) и дополнительных 8 байт, используемых для Хранение программы:36 - 5 - 8 = 23 байта
источник
Java (JDK) , 54 байта
Попробуйте онлайн!
Хотя для строгого числа по совпадению числа, следующее будет возвращать те же значения, но только 40 байтов.
Попробуйте онлайн!
источник
Your program doesn't have to complete the larger test cases, if there's memory or time constraints, but it should be theoretically able to if it were given more memory/time.
int
, а лучшеBigInteger
? Потому что у Java естьBigIntegers
, но никогда не будет подписанint
более 31 бит, который не может содержать никаких других значений, кроме тех, что представлены здесь ...int
тип не ограниченСборка x86,
4543 байта.Объяснение (Синтаксис Intel):
Вклад должен быть предоставлен в
EAX
.Функциональные наборы
EAX
для1
для совершенна и в0
течение несовершенной.РЕДАКТИРОВАТЬ : Уменьшено количество байтов на два путем замены
MOV EAX, $1
наXOR EAX, EAX
иINC EAX
источник
Лабиринт , 80 байт
Латинские символы
perfect puts zero else neg I
на самом деле просто комментарии *.то есть, если ввод является идеальным,
0
печатается, в противном случае-1
-.Попробуйте онлайн!
* так что эта или эта работа тоже ...
Как?
Принимает в качестве входных данных положительное целое число
n
и помещает переменную-накопитель-n
во вспомогательный стек, затем выполняет проверку делимости для каждого целого числа отn-1
нуля до, включая, в том числе1
, добавление любого, который делитn
в накопитель. Как только это будет завершено, если переменная аккумулятора не равна нулю,-1
выводится a, иначе0
.Выполняется
?::`}:(
только один раз, в начале выполнения:Следующая инструкция,
"
- no-op, но у нас есть три соседние инструкции, поэтому мы выполняем ветвление в соответствии со значением в верхней части Main, ноль ведет нас вперед, а ненулевой - прямо.Если ввод был,
1
мы идем вперед, потому что вершина Main равна нулю:Но если вход был больше, чем
1
мы поворачиваем направо, потому что вершина Main не равна нулю:На данный момент у нас есть ветвь с тремя соседями, но мы знаем, что
n-1
она ненулевая, поэтому мы поворачиваем направо ...Сейчас мы находимся в другом филиале с тремя соседями в
%
.Если результат
%
был ненулевым, мы идем влево, чтобы уменьшить наш потенциальный делительp=p-1
, и оставляем аккумуляторa
, как есть:... но если результат
%
равен нулю (только для первого проходаn=2
), мы идем прямо к ОБА добавляем делитель к нашему аккумуляторуa=a+p
И уменьшаем наш потенциальный делительp=p-1
:В этот момент, если
p-1
все еще не ноль, мы поворачиваем налево... но если вы
p-1
нажмете ноль, мы перейдем прямо ко:
второй строке лабиринта (вы уже видели все инструкции раньше, поэтому я оставляю их описания и просто даю их эффект):Теперь у этого
{
есть три соседние инструкции, так что ...... если
a
ноль, что будет идеальноn
, то мы идем прямо:... если
a
не ноль, что будет для неидеальногоn
, то мы поворачиваем налево:источник
CJam , 17 байт
Попробуйте онлайн!
источник
Javascript, 62
Объяснение (хотя это довольно просто)
Спасибо Джо Кингу за улучшение!
источник
05AB1E , 4 байта
Попробуйте онлайн!
объяснение
источник
Powershell,
46 байт,43 байтаПопробуйте онлайн!
Изменить: -3 байта благодаря @AdmBorkBork
источник
2*$i
чтобы исключить паренсы вычитания один.C (gcc) , 41 байт
Попробуйте онлайн!
Дайте мне знать, если этот провал в последнем случае является проблемой.
источник
n=!s;
вместо того,return!s;
чтобы сохранить 5 байтов.s=s
оптимизировать.Smalltalk, 34 байта
источник
Forth (gforth) , 45 байтов
Попробуйте онлайн!
объяснение
Перебирает каждое число от 1 до n-1, суммируя все значения, которые делят n идеально. Возвращает true, если сумма равна n
Код Объяснение
источник
Pyth , 9
13байтПопробуйте онлайн!
Спасибо комментаторам за помощь в гольфе
Находит все факторы ввода, суммирует их и сравнивает с исходным вводом.
источник
q0
могут быть заменены на!
, иSQ
производит диапазон[1-Q]
, так что диапазон[1-Q)
может быть создан с помощьюStQ
. КакQ
s теперь находятся в конце программы, они оба могут быть опущены. Fettled версия, 9 байтqsf!%QTSt
Пакет, 81 байт
Принимает
n
в качестве параметра командной строки и выводит,1
если это идеальное число. Метод грубой силы, запускает сумму в-n
так, чтобы она могла включитьn
себя в цикл.источник
Древесный уголь , 13 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Выходы
-
для идеальных чисел. Использует грубую силу. Объяснение:источник
Wolfram Language (Mathematica) , 14 байтов
Попробуйте онлайн!
источник
Pyth, 8 байт
Попробуйте это онлайн здесь .
источник
Сетчатка 0.8.2 , 44 байта
Попробуйте онлайн! Использует грубую силу, поэтому ссылка включает только более быстрые тестовые случаи. Объяснение:
Преобразовать в одинарный.
Соответствуйте всем факторам ввода. При этом используется режим перекрытия, который в Retina 0.8.2 требует, чтобы все совпадения начинались на разных позициях, поэтому совпадения фактически возвращаются в порядке убывания, начиная с исходного ввода.
Вычтите соответствующие факторы из входных данных.
Проверьте, равен ли результат нулю.
источник
Java 8, 66 байт
Кто-то должен использовать потоковый API в какой-то момент, даже если есть более короткий способ сделать это
Попробуйте онлайн!
источник
cQuents , 8 байтов
Попробуйте онлайн!
объяснение
источник