Bei zwei gegebenen Eingaben q n
bestimmen Sie, ob q
ein quadratischer Rest von n
.
Das heißt, gibt es eine x
Wo- x**2 == q (mod n)
oder q
eine Quadratmodifikation n
?
Eingang
Zwei ganze Zahlen q
und n
, wo q
und n
sind irgendwelche ganzen Zahlen 0 <= q < n
.
Ausgabe
Ein Wahrer oder Falscher.
Drucken Optional kann jede (oder alle) x
das ist ,x**2 == q (mod n)
Beispiele
>>> quadratic_residue(1, 5)
True
>>> quadratic_residue(3, 8)
False
>>> quadratic_residue(15, 22)
True
Regeln
Ihr Code muss ein Programm oder eine Funktion sein. Die Eingaben können in beliebiger Reihenfolge erfolgen. Dies ist Code Golf, also gewinnt der kürzeste Code in Bytes.
Wenn etwas unklar ist oder anderweitig repariert werden muss, lassen Sie es mich bitte wissen.
Boni
- 2-Byte-Bonus, wenn Ihre Funktion
q
eine beliebige Ganzzahl akzeptiert .
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
quelle
quelle
0 <= q < n
. Sie sollten wahrscheinlich klären, ob dies eine akzeptable Annahme ist.q
undn
zwei beliebige ganze Zahlen zu sein, aber so breche ich nicht vorhandenen Antworten,0 <= q < n
q
Antworten:
Pyth, 9 Bytes
Probieren Sie es online aus: Demo oder Test Suite
Erläuterung:
quelle
n
und dannq
. Also9\n7
als Eingabe probieren .Mathematica, 25 Bytes
Mathematica hat als Mathematica natürlich eine eingebaute Funktion zum Berechnen von Modulo-n-ten Wurzeln über
PowerMod
. Wenn eine Lösung vorhanden ist, wird die kleinste mögliche Lösung zurückgegeben, andernfalls der ursprüngliche Ausdruck (plus eine Nachricht).Um eine tatsächliche Wahrheits- / Falschausgabe zu erhalten, übergeben wir das Ergebnis an
AtomQ
, das prüft, ob ein Ausdruck zerlegt werden kann. Ganzzahlen sind atomar und kehren zurückTrue
, während die nichtatomarenPowerMod[q,1/2,n]
zurückkehrenFalse
Vielen Dank an @ MartinBüttner für Golftipps und die Funktionsjagd mit mir.
quelle
PowerMod
ein gebrochenes Argument führen könnte!Par ,
119 BytesJedes Zeichen verwendet nur ein Byte. siehe hier .
Erläuterung
Zwei Bytes dank Jakube entfernt.
quelle
LabVIEW,
1615 Äquivalente BytesNach meinem Metapost gezählt .
quelle
Haskell, 31 Bytes
3 Bytes gespart dank Martin Büttner.
quelle
q#n=any(\x->mod(x*x)n==q)[0..n]
und für 30 Bytes:q#n=[x|x<-[0..n],mod(x*x)n==q]
Gibt die Liste mit x / leeren Listen anstelle von True / False zurück.Matlab, 29
Diese Funktion quadriert alle Zahlen von 0 bis n und prüft, ob ein Quadrat minus q Null mod n ist.
quelle
Prolog (SWI), 34 Bytes
Code:
Erläuterung:
Überprüft , ob ein beliebiges Feld zwischen 0 und N Blättern Q , wenn es durch unterteilt N .
Beispiel:
Probieren Sie es hier online aus
quelle
CJam, 11 Bytes
Dieser unbenannte Block erwartet
q n
auf dem Stapel und[q]
verbleibt als wahrer Wert oder""
als falscher Wert auf dem Stapel .Teste es hier.
Danksagung an Sp3000, die ebenfalls auf diese Lösung gekommen sind, sich aber nicht die Mühe machen konnten, sie zu veröffentlichen.
Erläuterung
quelle
J 9 Bytes
Verwendung:
Erläuterung:
Einige J-Mechaniker-Trivia:
Funktionen werden iterativ von rechts nach 3 gruppiert, und wenn wie in unserem Fall (
e. (] | (i. ^ 2:))
) noch eine übrig ist , wird der gruppierte Teil mit dem rechten Argument (N
) und die ausgelassene Funktion (e.
, "enthält") mit dem ursprünglichen linken aufgerufen Argument (Q
) und das Ergebnis des gruppierten Teils.(
e.]|i.*i.
unde.]|2^~i.
löst auch das Problem mit gleicher Länge.)Probieren Sie es hier online aus.
quelle
Mathematica, 27 Bytes
Verwendung:
quelle
Javascript ES6, 42 Bytes
Credits an @apsilers für ernsthafte Bytes gespeichert!
quelle
...Array
Syntax? Ich verstehe es immer noch nicht.[...Array(5)]
erzeugt Array vonundefined
, wieArray(5)
allein. Ich bin total verwirrt, weil das Entfernen der seltsamen Syntax und das Verwenden nurArray(5)
den Code kaputt macht. Gibt es dafür Unterlagen? Screenshot meiner KonsoleArray(5)
ist ein Array ohne eigene Eigenschaften außerlength
. Die Array-Verteilung[...x]
füllt fehlende numerische Eigenschaften bis auf auslength
. Diemap
Funktion kann nur auf vorhandene Eigenschaften angewendet werden, dieArray(5)
allein nicht vorhanden sind. Versuchen Sie zum BeispielArray(5).hasOwnProperty(0)
(falsch) gegen[...Array(5)].hasOwnProperty(0)
(wahr).some
kürzer und (wie ich finde) gleichwertig:(q,n)=>[...Array(n)].some((x,y)=>y*y%n==q)
Im Ernst , 20 Bytes
Nimmt Eingaben in zwei Zeilen vor:,
q
dannn
. Gibt ein0
if aus,q
das kein quadratischer Rest von istn
, andernfalls eine positive Zahl, die angibt, wie vielex
in[1, q]
(einschließlich) erfüllt sindx^2 = q (mod n)
.Probieren Sie es online aus (Permalinks haben weitere Probleme, aber Sie können den Code in der Zwischenzeit kopieren und in eine leere Seite einfügen. )
Erläuterung:
quelle
Python 3,
4140 BytesNimmt
q
undn
und bestimmt, obq
in einer Liste von Quadraten von0
Quadrat zun-1
Quadrat steht.quelle
Ruby,
3331 BytesZwei Bytes dank Vasu Adari gespart.
Wie immer wird Ruby keine der Golfsprachen schlagen, aber es macht hier eine gute Figur.
quelle
->q,n{}
.Julia, 30 Bytes
Dies ist eine Funktion
f
, die zwei Ganzzahlen akzeptiert und einen Booleschen Wert zurückgibt.Ungolfed:
quelle
JavaScript (ES6), 43 Byte
Erläuterung
Prüfung
Code-Snippet anzeigen
quelle
𝔼𝕊𝕄𝕚𝕟 13 Zeichen / 25 Byte
Try it here (Firefox only).
quelle
15 22
und es standfalse
.Japt, 10 Bytes
Mein erster offizieller Japt Golf aller Zeiten! Vielen Dank an @ETHProductions für das Speichern eines Bytes!
Ungolfed / Erklärung
Probieren Sie es online!
quelle
0oV
entsprichtVo
.C # 6 (.Net Framework 4.6) in LinqPad, 60 Bytes
quelle
Milchstraße 1.0.2 , 41 Bytes
Dies erwartet
q
undn
befindet sich ausschließlich auf dem Stack. Es gibt ein1
oder0
für die Wahrheit und falsche Werte aus.quelle
Pari / GP , 25 Bytes
Probieren Sie es online!
quelle
JavaScript (Node.js) , 33 Byte
Probieren Sie es online!
Warum macht das niemand?
quelle