В Base-10 все совершенные квадраты заканчиваются на 0 , 1 , 4 , 5 , 6 или 9 .
В Base-16 все совершенные квадраты заканчиваются на 0 , 1 , 4 или 9 .
Нилькнарф описывает, почему это так и как это очень хорошо решить в этом ответе, но я также дам краткое описание здесь:
При возведении в квадрат числа Base-10, N , цифра «единицы» не зависит от того, что находится в цифре «десятки» или цифры «сотни» и так далее. Только цифра «единицы» в N влияет на цифру «единицы» в N 2 , поэтому простой (но, возможно, не самый удачный) способ найти все возможные последние цифры для N 2 - это найти n 2 mod 10 для всех 0 <= n < 10 . Каждый результат является возможной последней цифрой. Для Base-m вы можете найти n 2 mod m для всех 0 <= n < m .
Напишите программу, которая при вводе N выводит все возможные последние цифры для идеального квадрата в Base-N (без дубликатов). Вы можете предположить, что N больше 0 , и что N достаточно мало, чтобы N 2 не переполнялся (Если вы можете протестировать весь путь до N 2 , я дам вам конечное количество очков брауни, но знайте, что обменный курс брауни-баллов к реальным баллам равен бесконечности до единицы).
тесты:
Input -> Output
1 -> 0
2 -> 0,1
10 -> 0,1,5,6,4,9
16 -> 0,1,4,9
31 -> 0,1,2,4,5,7,8,9,10,14,16,18,19,20,25,28
120 -> 0,1,4,9,16,24,25,36,40,49,60,64,76,81,84,96,100,105
это код-гольф , поэтому применяются стандартные правила!
(Если вы находите это слишком простым или хотите получить более глубокий вопрос по этой теме, рассмотрите этот вопрос: минимальное покрытие базисов для проверки квадратичности квадратичного остатка ).
источник
Ответы:
Желе , 5 байт
Попробуйте онлайн!
объяснение
источник
Google Sheets,
525147 байтСохранено 4 байта благодаря Тейлору Скотту
Листы автоматически добавят 4 закрывающие скобки в конец формулы.
Он не возвращает результаты в порядке возрастания, но возвращает правильные результаты.
источник
)
s для -4 байта05AB1E , 5 байтов
Попробуйте онлайн! или как тестовый набор
источник
s
здесь работает? Повторяется ли ввод?s
этоpop a,b; push b,a
. Когда команда пытается извлечь что-то из стека и ничего не осталось, используется следующий ввод. Если больше нет ввода, используется последний ввод ( вот пример ). В этом случае я мог бы использовать тот,¹
который выдвигает первый ввод, ноs
лучше работает для набора тестов.Ln¹%ê
здесь эквивалентен.s
,Swift ,
47 3532 * байт* -3 спасибо @Alexander.
Возможно, впервые в истории Swift
связиобошли Python?Попробуйте онлайн!
объяснение
(0..<m).map{}
- перебирает диапазон[0...m)
и отображает следующие результаты:$0*$0%m
- квадрат каждого целого по модулю основанияm
.Set(...)
- удаляет дубликаты.m in
- назначает базу переменнойm
источник
C #, 63 байта
Попробуйте онлайн!
источник
JavaScript (ES6), 52 байта
Контрольные примеры
Показать фрагмент кода
Нерекурсивная версия,
6058 байтСохранено 2 байта благодаря @ThePirateBay
Контрольные примеры
Показать фрагмент кода
источник
m=>(a=[...Array(m).keys()]).filter(v=>a.some(n=>n*n%m==v))
Pyth, 6 байт
Попробуйте онлайн
Как это устроено
источник
Брахилог ,
109 байтПопробуйте онлайн!
объяснение
источник
{>≜^₂;?%}ᵘ
в качестве альтернативы ... потом я понял, что есть и отрицательные числа. > _ <≜
.>
все равно учитывал бы отрицательные числа afaik.Japt ,
76 байтПроверь это
1 байт спасен благодаря Оливеру
объяснение
Неявный ввод целого числа
U
.Создайте массив целых чисел от
0
доU-1
, включительно и передавайте каждый через функцию.Площадь.
Модульное
U
.Получить все уникальные элементы в массиве и неявно вывести результат.
источник
Dz%UÃâ
Кажется, работает просто отлично.Python 3 ,
403937 байт-1 байт благодаря мистеру Xcoder. -2 байта благодаря Business Cat.
Попробуйте онлайн!
источник
n**2
наn*n
?range(m)
достаточноФактически , 11 байтов
Попробуйте онлайн!
Объяснение:
источник
CJam , 12 байт
Анонимный блок принимает номер и возвращает список.
Попробуйте онлайн!
объяснение
источник
{:X{_*X%}%_&}
по 13 байтHaskell , 45 байт
-4 байта от Андерса Касеорга
Попробуйте онлайн!
источник
f m=nub$map((`mod`m).(^2))[0..m]
так же длинна, если только нет хитрого синтаксиса, чтобы избавиться от лишних скобок.МАТЛ ,
65 байт-1 байт благодаря @LuisMendo
Попробуйте онлайн!
источник
Октава , 27 байт
Попробуйте онлайн!
источник
Mathematica, 30 байт
Попробуйте онлайн!
источник
JavaScript (ES6), 48 байт
43 байта, если
Set
приемлем возврат массива вместо массива.источник
Scala ,
3230 байтПростое использование простого наконечника от OP.
Попробуйте онлайн!
-2 байта благодаря @MrXcoder, с приоритетами (нет необходимости в
()
около*
операции)Интересно: возможно ли это неявно сказать компилятору, чтобы он понимал такие вещи, как
(0 to n-1)map(x=>x*x%n)toSet
(без необходимостиimport scala.language.postfixOps
)?источник
(0 to n-1).map(x=>x*x%n).toSet
для 30 байтов. Возведение в степень имеет более высокий приоритет, чем по модулю.Haskell , 44 байта
Попробуйте онлайн!
источник
Сетчатка , 70 байт
Попробуйте онлайн! Предупреждение: медленно для больших входов. Чуть быстрее 72-байтовая версия:
Попробуйте онлайн!
источник
Clojure, 40 байт
источник
Perl 6 , 19 байт
Проверь это
Expanded:
источник
Pyth , 13 байт
Попробуйте онлайн.
Хромая попытка объяснить:
Чтобы отсортировать вывод, вставьте
S
на любой стороне{
Я думаю, что должен быть более короткий путь ...
источник
map
твой друг!Python 2 , 59 байт
Попробуйте онлайн!
источник
PowerShell , 35 байт
Попробуйте онлайн!
источник
R , 28 байт
Попробуйте онлайн!
источник
Рубин ,
3130 байтПопробуйте онлайн!
источник
PHP , 53 байта
Переходите от 0 к вводимому номеру, используя
n^2 mod base
формулу для пометки номеров, которые были использованы. Он перемещается в эту позицию в массиве, проверяет, увеличен ли он, и выводит его, если нет. Затем он постепенно увеличивает его, чтобы дублированные значения не печатались.Попробуйте онлайн!
источник
8-е ,
138131 байтКод
объяснение
[]
- Создать выходной массивswap dup >r
- Сохранить вход для последующего использования( 2 ^ r@ n:mod a:push ) 1 rot loop
- Вычислить квадратный конецrdrop
- Чистый р-стек' n:cmp a:sort
- Сортировать выходной массив' n:cmp >r -1 a:@ swap ( tuck r@ w:exec ) a:filter rdrop nip
- Избавиться от последовательных дубликатов из массиваSED (диаграмма эффекта стека) - это:
a -- a
Использование и пример
источник
Perl 5 , 41 + 1 (-n) = 42 байта
Попробуйте онлайн!
источник