Пусть (вход)
Тогда делителями являются: 1, 2, 3, 6, 7, 14, 21, 42
Квадрат каждого делителя: 1, 4, 9, 36, 49, 196, 441, 1764
Взятие суммы (добавление): 2500
Поскольку поэтому мы возвращаем истинное значение. Если это не идеальный квадрат, верните ложное значение.
Примеры :
42 ---> true
1 ---> true
246 ---> true
10 ---> false
16 ---> false
Это код-гольф, поэтому выигрывает самый короткий код в байтах для каждого языка
Спасибо @Arnauld за указание последовательности: A046655
code-golf
math
number
decision-problem
Any3nymous пользователь
источник
источник
Ответы:
R ,
3937 байтПопробуйте онлайн!
Использует классический подход «проверить, если идеальный квадрат», принимая нецелую часть квадратного корня
S^.5%%1
и принимая логическое отрицание этого, поскольку он отображает ноль (идеальный квадрат) вTRUE
и ненулевой вFALSE
.Спасибо Роберту С за сохранение нескольких байтов!
источник
scan()
чтобы сохранить несколько байтов?JavaScript (ES7),
46 4442 байтаСохранено 1 байт благодаря @Hedi
Попробуйте онлайн!
комментарии
источник
d
переходя отn
к0
вместо того,2
чтобыn
полюбить это:n=>!((g=d=>d?d*d*!(n%d)+g(d-1):0)(n)**.5%1)
05AB1E , 5 байтов
Попробуйте онлайн!
Как?
источник
Язык программирования Шекспира ,
434428415 байтПопробуйте онлайн!
-13 байтов благодаря Джо Кингу!
Выходы
1
для истинного результата, выходы0
для ложного результата.источник
Python 2 , 55 байт
Попробуйте онлайн!
источник
Нейм , 5 байт
Объяснение:
Попробуйте онлайн!
источник
C (gcc) ,
67636059 байт-1 байт благодаря @JonathanFrech
Попробуйте онлайн!
источник
++i<=n
бытьi++<n
?Брахилог ,
128 байт-4 байта благодаря Fatelize, потому что я не понимал, что брахилог имеет функции факторов
объяснение
Попробуйте онлайн!
источник
f^₂ᵐ
на 4 байта корочеḋ{⊇×^₂}ᵘ
MathGolf ,
54 байтаПопробуйте онлайн!
объяснение
Очень похоже на другие ответы, по сравнению с 05AB1E я получаю один байт для своего оператора "идеальный квадрат".
источник
MATL , 9 байт
Попробуйте онлайн!
Так просто, как это возможно
источник
PowerShell ,
6856 байтПопробуйте онлайн!
Кажется долго ...-12 байтов благодаря маззи
Делает именно то, что говорит на жестяной банке. Принимает диапазон от
1
ввода$n
и умножает квадрат на квадраты,$_*$_
независимо от того, делитель это или нет!($n%$_)
. Это делает делители равными ненулевому числу, а делители равными нулю. Затем мы берем их сумму с нашим аккумулятором$a
. Затем мы делаем цикл снова от1
до до$a
и вытащить те числа , где|?{...}
он в квадрате-eq
UAL с$a
. Это остается на конвейере и вывод неявный.Выводит положительное целое число для правды и ничего для фальси.
источник
$args[0]
короче :)1..$args[0]|%{$a+=$_*$_*!($n%$_)};1..$a|?{$_*$_-eq$a}
$n
внутри цикла для!($n%$_)
. Но ваша перезапись суммы сэкономила 12 байтов, так что спасибо!$args[0]
короче :)Japt ,
1197 байт-2 байта от @Giuseppe и еще -2 от @Shaggy
Попробуйте онлайн!
источник
APL (Dyalog Unicode) , 18 байт
Попробуйте онлайн!
Анонимная лямбда. Возвращает 1 для правдивых и 0 для ложных (тестовые случаи в TIO предварительно проверены).
Привет @ H.PWiz за 4 байта!
Как:
источник
not
а не0=
сохранить байт?not
оператор (~
), когда используется монадически, работает только с логическими значениями (0 или 1). Поскольку любое число по модулю 1 никогда не равно 1, если бы я использовал~
вместо него0=
, я бы получил adomain error
на любое число, которое не является идеальным квадратом, так как десятичные значения находятся вне~
домена. Кроме того, я не могу просто опустить0=
, поскольку истинное значение APL равно 1, а не 0, и у него не будет согласованного вывода для ложных значений.K (ок) ,
262522 байтаРешение:
Попробуйте онлайн!
Объяснение:
Примечания:
источник
Пари / ГП , 23 байта
Попробуйте онлайн!
источник
Матлаб,
3937 байтК сожалению, он не работает в Octave (на tio), поэтому нет ссылки на tio.
Примечание Как указано @LuisMendo,
divisors()
принадлежит Symbolic Toolbox.источник
divisors
принадлежит к Symbolic Toolbox. Вы должны указать это в заголовке. Кроме того, вы можете использовать~···
вместо···==0
sum(...)^.5
вместоsqrt(sum(...))
Haskell ,
786453 байта-14 байтов благодаря Орджану Йохансену . -11 байт благодаря овс .
Попробуйте онлайн!
Эй, это было время , так как я ... написал никакого кода, поэтому мой Haskell и игра в гольф может немного ржавый. Я забыл хлопотные числовые типы Haskell. :П
источник
Пыть , 7 байт
Попробуйте онлайн!
объяснение
Попробуйте онлайн!
объяснение
Попробуйте онлайн!
объяснение
источник
Шелуха , 6 байт
Попробуйте онлайн!
объяснение
источник
Желе , 6 байт
Попробуйте онлайн! Или посмотрите набор тестов .
Как?
источник
Протон , 41 байт
Попробуйте онлайн!
Подобный подход к ответу Python.
источник
Mathematica, 32 байта
Чистая функция. Принимает число как ввод и возвращает
True
илиFalse
как вывод. Не совсем уверен, есть ли более короткий метод проверки идеальных квадратов.источник
Октава / MATLAB, 43 байта
Попробуйте онлайн!
источник
Красный , 67 байт
Попробуйте онлайн!
источник
Scala ,
6867 байтПопробуйте онлайн!
источник
Perl 6 , 34 байта
-1 байт благодаря nwellnhof
Попробуйте онлайн!
источник
**.5
на один байт короче.sqrt
.F #, 111 байт
Попробуйте онлайн!
Так
d
получаются делители для всех чисел от 1 доn
включительно. В основной функцииu
первая строка присваивает сумму всех квадратов делителейm
. Вторая строка получает делители дляm
и определяет, равен ли любой из них в квадратеm
.источник
Perl 5, 47 байт
Возвращает 1 для истины и ничего для ложных.
Объяснение:
источник
Groovy , 47 байтов
Лямбда, принимающая числовой аргумент.
объяснение
(1..n)
создает массив значений от 1 до nn%i
ложно (так как 0 ложно), еслиi
делитсяn
без остаткаn%i ? 0 : i*i
является суммой квадрата значения,i
если оно делитсяn
без остатка, в противном случае равно 0sum{ i-> n%i ? 0 : i*i }
суммирует предыдущий результат по всемуi
массиву.s%Math.sqrt(s)
ложно (так как 0 ложно), если квадратs
делитсяs
без остатка!(s%Math.sqrt(s))
возвращает из лямбды (return
неявной в последнем утверждении),!false
когда sqrts
делитсяs
без остаткаПопробуйте онлайн!
источник
Java 8,
7570 байт-5 байт благодаря @ archangel.mjj .
Попробуйте онлайн.
Объяснение:
источник
n->{int s=0,i=0;for(;++i<=n;)s+=n%i<1?i*i:0;return Math.sqrt(s)%1==0;}