Biorąc pod uwagę dwa dane wejściowe, q n
określ, czy q
jest kwadratową pozostałością n
.
To znaczy, czy jest x
gdzie x**2 == q (mod n)
lub jest q
kwadratowy mod n
?
Wkład
Dwie liczby całkowite q
oraz n
, gdzie q
i n
są dowolnymi liczbami całkowitymi 0 <= q < n
.
Wydajność
Prawda czy falsey.
Opcjonalnie wydrukuj dowolny (lub wszystkie), x
który jestx**2 == q (mod n)
Przykłady
>>> quadratic_residue(1, 5)
True
>>> quadratic_residue(3, 8)
False
>>> quadratic_residue(15, 22)
True
Zasady
Twój kod musi być programem lub funkcją. Wejścia mogą być w dowolnej kolejności. To jest kod golfowy, więc wygrywa najkrótszy kod w bajtach.
Jeśli coś jest niejasne lub w inny sposób wymaga naprawy, daj mi znać.
Bonusy
- 2-bajtowy bonus, jeśli twoja funkcja przyjmuje
q
dowolną liczbę całkowitą.
Katalog
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
źródło
źródło
0 <= q < n
. Prawdopodobnie powinieneś wyjaśnić, czy jest to akceptowalne założenie.q
in
być dwiema liczbami całkowitymi, ale nie łamię istniejących odpowiedzi,0 <= q < n
q
Odpowiedzi:
Pyth, 9 bajtów
Wypróbuj online: pakiet demonstracyjny lub testowy
Wyjaśnienie:
źródło
n
i późniejq
. Więc spróbuj9\n7
jako dane wejściowe.Mathematica, 25 bajtów
Mathematica, będąc Mathematica, ma oczywiście wbudowane narzędzie do obliczania modulo-tych pierwiastków za pośrednictwem
PowerMod
. Jeśli istnieje rozwiązanie, zwracane jest najmniejsze możliwe rozwiązanie, w przeciwnym razie oryginalne wyrażenie (plus komunikat).Aby uzyskać rzeczywiste dane wyjściowe typu prawda / fałsz, przekazujemy wynik do
AtomQ
, który sprawdza, czy wyrażenie można rozbić. Liczby całkowite są atomowe, powracająTrue
, podczas gdy nie-atomowePowerMod[q,1/2,n]
zwracaFalse
Dzięki @ MartinBüttner za wskazówki dotyczące golfa i polowanie na funkcje ze mną.
źródło
PowerMod
wziąć ułamek!Par ,
119 bajtówKażda postać używa tylko jednego bajtu; patrz tutaj .
Wyjaśnienie
Usunięto dwa bajty dzięki Jakube.
źródło
LabVIEW,
1615 Równoważne bajtyPoliczone według mojego meta postu .
źródło
Haskell, 31 bajtów
Zaoszczędzono 3 bajty dzięki Martinowi Büttnerowi.
źródło
q#n=any(\x->mod(x*x)n==q)[0..n]
i dla 30 bajtów:q#n=[x|x<-[0..n],mod(x*x)n==q]
która zwraca listę x / pustej listy zamiast True / False.Matlab, 29
Ta funkcja kwadratuje wszystkie liczby od 0 do n i sprawdza, czy kwadrat minus q jest zerowy mod n.
źródło
Prolog (SWI), 34 bajty
Kod:
Objaśnienie:
Kontrole jeśli kwadratowe między 0 a N li Q gdy podzielone przez N .
Przykład:
Wypróbuj online tutaj
źródło
CJam, 11 bajtów
Ten nienazwany blok oczekuje
q n
na stosie i pozostawia[q]
na stosie wartość prawdziwą lub""
fałszywą.Sprawdź to tutaj.
Podziękowania dla Sp3000, który również wymyślił to rozwiązanie, ale „nie można go było niepokoić”.
Wyjaśnienie
źródło
J, 9 bajtów
Stosowanie:
Wyjaśnienie:
Kilka ciekawostek mechaniki J:
Funkcje są grupowane po 3 iteracyjnie od prawej, a jeśli jest jedna, tak jak w naszym przypadku (
e. (] | (i. ^ 2:))
), część zgrupowana jest wywoływana za pomocą prawego argumentu (N
), a funkcja pominięta (e.
„zawiera”) wywoływana z oryginalną lewą argument (Q
) i wynik zgrupowanej części.(
e.]|i.*i.
ae.]|2^~i.
także rozwiązuje problem o tej samej długości).Wypróbuj online tutaj.
źródło
Mathematica, 27 bajtów
Stosowanie:
źródło
JavaScript ES6, 42 bajty
Zapisano kredyty dla @apsilers za poważne bajty!
źródło
...Array
składnia? Nadal nie rozumiem.[...Array(5)]
tworzy tablicęundefined
, taką samą jakArray(5)
sam. Jestem całkowicie zdezorientowany, ponieważ usunięcie dziwnej składni i użycie po prostuArray(5)
psuje kod. Czy jest na to jakaś dokumentacja? zrzut ekranu z mojej konsoliArray(5)
jest tablicą bez własnych właściwości opróczlength
. Rozkład tablicowy[...x]
uzupełnia brakujące właściwości numeryczne dolength
.map
Funkcja może działać jedynie na zachowanych właściwościach, któreArray(5)
same w sobie nie ma. Na przykład spróbujArray(5).hasOwnProperty(0)
(fałsz) kontra[...Array(5)].hasOwnProperty(0)
(prawda).some
jest krótsze i (myślę) równoważne:(q,n)=>[...Array(n)].some((x,y)=>y*y%n==q)
Poważnie , 20 bajtów
Pobiera dane wejściowe w dwóch wierszach:
q
następnien
. Wyprowadza0
jeśliq
nie jest reszta kwadratowa zn
, jeszcze dodatnia liczba reprezentująca ilex
w[1, q]
(włącznie) spełniająx^2 = q (mod n)
.Wypróbuj online (permalinki mają więcej problemów, ale w międzyczasie możesz skopiować i wkleić kod na pustej stronie )
Wyjaśnienie:
źródło
Python 3,
4140 bajtówPobiera
q
in
określa, czyq
jest na liście kwadratów od0
kwadratu don-1
kwadratu.źródło
Rubin,
3331 bajtówZaoszczędzono dwa bajty dzięki Vasu Adari.
Jak zwykle Ruby nie pokona żadnego z golfowych języków, ale dobrze się tu prezentuje.
źródło
->q,n{}
.Julia, 30 bajtów
Jest to funkcja,
f
która akceptuje dwie liczby całkowite i zwraca wartość logiczną.Nie golfowany:
źródło
JavaScript (ES6), 43 bajty
Wyjaśnienie
Test
Pokaż fragment kodu
źródło
𝔼𝕊𝕄𝕚𝕟, 13 znaków / 25 bajtów
Try it here (Firefox only).
źródło
15 22
i powiedziałfalse
.Japt, 10 bajtów
Mój pierwszy oficjalny golf Japt w historii! Dzięki @ETHProductions za uratowanie bajtu!
Niegolfowane / Wyjaśnienie
Wypróbuj online!
źródło
0oV
odpowiadaVo
.C # 6 (.Net Framework 4.6) w LinqPad, 60 bajtów
źródło
Droga Mleczna 1.0.2 , 41 bajtów
Oczekuje
q
in
będzie wyłącznie na stosie. Wyprowadza odpowiednio a1
lub0
prawdę i fałsz.źródło
Pari / GP , 25 bajtów
Wypróbuj online!
źródło
JavaScript (Node.js) , 33 bajty
Wypróbuj online!
Dlaczego nikt tego nie robi
źródło