С учетом двух входных данных q n
определить, q
является ли квадратичный остаток от n
.
То есть есть x
где x**2 == q (mod n)
или q
квадратный мод n
?
вход
Два целых числа q
и n
, где q
и n
любые целые числа 0 <= q < n
.
Выход
Истина или ложь.
При желании, распечатать любой (или все), x
чтоx**2 == q (mod n)
Примеры
>>> quadratic_residue(1, 5)
True
>>> quadratic_residue(3, 8)
False
>>> quadratic_residue(15, 22)
True
правила
Ваш код должен быть программой или функцией. Входные данные могут быть в любом порядке. Это код гольф, поэтому выигрывает самый короткий код в байтах.
Если что-то неясно или необходимо исправить, пожалуйста, дайте мне знать.
Бонусы
- 2-байтовый бонус, если ваша функция принимает
q
любое произвольное число.
Каталог
var QUESTION_ID=65329;var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";var COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk";var OVERRIDE_USER=47581;var answers=[],answers_hash,answer_ids,answer_page=1,more_answers=true,comment_page;function answersUrl(index){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(index,answers){return"http://api.stackexchange.com/2.2/answers/"+answers.join(';')+"/comments?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){answers.push.apply(answers,data.items);answers_hash=[];answer_ids=[];data.items.forEach(function(a){a.comments=[];var id=+a.share_link.match(/\d+/);answer_ids.push(id);answers_hash[id]=a});if(!data.has_more)more_answers=false;comment_page=1;getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){data.items.forEach(function(c){if(c.owner.user_id===OVERRIDE_USER)answers_hash[c.post_id].comments.push(c)});if(data.has_more)getComments();else if(more_answers)getAnswers();else process()}})}getAnswers();var SCORE_REG=/<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;var OVERRIDE_REG=/^Override\s*header:\s*/i;function getAuthorName(a){return a.owner.display_name}function process(){var valid=[];answers.forEach(function(a){var body=a.body;a.comments.forEach(function(c){if(OVERRIDE_REG.test(c.body))body='<h1>'+c.body.replace(OVERRIDE_REG,'')+'</h1>'});var match=body.match(SCORE_REG);if(match)valid.push({user:getAuthorName(a),size:+match[2],language:match[1],link:a.share_link,});else console.log(body)});valid.sort(function(a,b){var aB=a.size,bB=b.size;return aB-bB});var languages={};var place=1;var lastSize=null;var lastPlace=1;valid.forEach(function(a){if(a.size!=lastSize)lastPlace=place;lastSize=a.size;++place;var answer=jQuery("#answer-template").html();answer=answer.replace("{{PLACE}}",lastPlace+".").replace("{{NAME}}",a.user).replace("{{LANGUAGE}}",a.language).replace("{{SIZE}}",a.size).replace("{{LINK}}",a.link);answer=jQuery(answer);jQuery("#answers").append(answer);var lang=a.language;lang=jQuery('<a>'+lang+'</a>').text();languages[lang]=languages[lang]||{lang:a.language,lang_raw:lang.toLowerCase(),user:a.user,size:a.size,link:a.link}});var langs=[];for(var lang in languages)if(languages.hasOwnProperty(lang))langs.push(languages[lang]);langs.sort(function(a,b){if(a.lang_raw>b.lang_raw)return 1;if(a.lang_raw<b.lang_raw)return-1;return 0});for(var i=0;i<langs.length;++i){var language=jQuery("#language-template").html();var lang=langs[i];language=language.replace("{{LANGUAGE}}",lang.lang).replace("{{NAME}}",lang.user).replace("{{SIZE}}",lang.size).replace("{{LINK}}",lang.link);language=jQuery(language);jQuery("#languages").append(language)}}
body{text-align:left!important}#answer-list{padding:10px;width:290px;float:left}#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table>
code-golf
math
arithmetic
number-theory
Sherlock9
источник
источник
0 <= q < n
. Вам, вероятно, следует уточнить, является ли это приемлемым предположением.q
иn
быть любыми двумя целыми числами, но я не ломаю существующие ответы,0 <= q < n
q
Ответы:
Pyth, 9 байт
Попробуйте онлайн: демонстрация или тестовый набор
Объяснение:
источник
n
и чемq
. Так что попробуйте в9\n7
качестве ввода.Mathematica, 25 байтов
Mathematica, будучи Mathematica, естественно имеет встроенную функцию для вычисления модуляльных корней через
PowerMod
. Если решение существует, возвращается наименьшее возможное решение, в противном случае исходное выражение (плюс сообщение).Чтобы получить реальный вывод «правда / ложь», мы передаем результат
AtomQ
, который проверяет, можно ли разбить выражение. Целые числа являются атомарными, возвращаютсяTrue
, в то время как неатомарныеPowerMod[q,1/2,n]
возвращаютсяFalse
Спасибо @ MartinBüttner за советы по игре в гольф и функциональную охоту со мной.
источник
PowerMod
мог принять дробный аргумент!Par ,
119 байтКаждый символ использует только один байт; см здесь .
объяснение
Удалил два байта благодаря Якубе.
источник
LabVIEW,
1615 эквивалентных байтовПодсчитано согласно моему мета посту .
источник
Haskell, 31 байт
Сохранено 3 байта благодаря Мартину Бюттнеру.
источник
q#n=any(\x->mod(x*x)n==q)[0..n]
и для 30 байт:q#n=[x|x<-[0..n],mod(x*x)n==q]
который возвращает список x / empty list вместо True / False.Матлаб, 29
Эта функция возводит в квадрат все числа от 0 до n и проверяет, равен ли квадрат минус q нулю mod n.
источник
Пролог (SWI), 34 байта
Код:
Объяснение:
Проверки , если любой квадрат между 0 и N листьев Q при делении на N .
Пример:
Попробуйте онлайн здесь
источник
CJam, 11 байт
Этот безымянный блок ожидает
q n
в стеке и оставляет[q]
в стеке как истинное значение или""
как ложное значение.Проверьте это здесь.
Кредиты для Sp3000, который также предложил это решение, но "не может быть обеспокоен размещением".
объяснение
источник
J, 9 байт
Использование:
Объяснение:
Некоторые мелочи J механики:
Функции сгруппированы по 3 итеративно справа и, если есть одна левая, как в нашем случае (
e. (] | (i. ^ 2:))
), сгруппированная часть вызывается с правым аргументом (N
), а функция left out (e.
, "содержит") вызывается с исходной левой Аргумент (Q
) и результат сгруппированной части.(
e.]|i.*i.
аe.]|2^~i.
также решает проблему с такой же длиной.)Попробуйте это онлайн здесь.
источник
Mathematica, 27 байт
Использование:
источник
Javascript ES6, 42 байта
Кредиты @apsilers за серьезные байты сохранены!
источник
...Array
синтаксис? Я до сих пор не понимаю.[...Array(5)]
производит массивundefined
, так же, как вArray(5)
одиночку. Я полностью сбит с толку, потому что удаление странного синтаксиса и использование простоArray(5)
нарушает код. Есть ли документация для этого? скриншот моей консолиArray(5)
- массив без собственных свойств, кромеlength
. Распределение массива[...x]
заполняет пропущенные числовые свойства доlength
.map
Функция может работать только на существующих свойств, которыеArray(5)
сами по себе не имеют. Например, попробуйтеArray(5).hasOwnProperty(0)
(false) против[...Array(5)].hasOwnProperty(0)
(true).some
короче и (я думаю) эквивалентно:(q,n)=>[...Array(n)].some((x,y)=>y*y%n==q)
Серьезно , 20 байтов
Принимает ввод в две строки:,
q
затемn
. Выводит,0
если ifq
не является квадратичным остаткомn
, иначе положительное число, представляющее, сколько удовлетворяетx
в[1, q]
(включительно)x^2 = q (mod n)
.Попробуйте онлайн (постоянные ссылки имеют больше проблем, но вы можете скопировать и вставить код на пустую страницу )
Объяснение:
источник
Python 3,
4140 байтПринимает
q
иn
и определяет, есть лиq
в списке квадратов от0
квадрата доn-1
квадрата.источник
Рубин,
3331 байтСохранено два байта благодаря Васу Адари.
Как обычно, Руби не собирается побеждать ни в одном из языков игры в гольф, но здесь это хорошо видно.
источник
->q,n{}
.Юлия, 30 байт
Это функция,
f
которая принимает два целых числа и возвращает логическое значение.Ungolfed:
источник
JavaScript (ES6), 43 байта
объяснение
Тест
Показать фрагмент кода
источник
𝔼𝕊𝕄𝕚𝕟, 13 символов / 25 байтов
Try it here (Firefox only).
источник
15 22
и он сказалfalse
.Japt, 10 байт
Мой первый официальный гольф Japt! Спасибо @ETHProductions за сохранение байта!
Ungolfed / Объяснение
Попробуйте онлайн!
источник
0oV
это эквивалентноVo
.C # 6 (.Net Framework 4.6) в LinqPad, 60 байт
источник
Млечный Путь 1.0.2 , 41 байт
Это ожидает
q
иn
будет исключительно в стеке. Это выводит1
или0
для правды и ложных значений, соответственно.источник
Пари / ГП , 25 байт
Попробуйте онлайн!
источник
JavaScript (Node.js) , 33 байта
Попробуйте онлайн!
Почему никто не делает это
источник