Étant donné deux entrées, q n
déterminez si q
est un résidu quadratique de n
.
Autrement dit, y a-t-il un x
où x**2 == q (mod n)
ou q
un mod carré n
?
Contribution
Deux entiers q
et n
, où q
et n
sont des entiers 0 <= q < n
.
Sortie
Un vrai ou un falsey.
En option, imprimer tout (ou tout) x
qui estx**2 == q (mod n)
Exemples
>>> quadratic_residue(1, 5)
True
>>> quadratic_residue(3, 8)
False
>>> quadratic_residue(15, 22)
True
Règles
Votre code doit être un programme ou une fonction. Les entrées peuvent être dans n'importe quel ordre. C'est le code golf, donc le code le plus court en octets l'emporte.
Si quelque chose n'est pas clair ou doit être réparé, faites-le moi savoir.
Bonus
- Bonus de 2 octets si votre fonction accepte
q
comme n'importe quel entier arbitraire.
Catalogue
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
la source
la source
0 <= q < n
. Vous devriez probablement préciser s'il s'agit ou non d'une hypothèse acceptable.q
etn
être deux entiers, mais donc je ne casse pas les réponses existantes,0 <= q < n
q
Réponses:
Pyth, 9 octets
Essayez-le en ligne: démonstration ou suite de tests
Explication:
la source
n
et ensuiteq
. Essayez donc9\n7
en entrée.Mathematica, 25 octets
Mathematica, étant Mathematica, a naturellement une fonction intégrée pour calculer les racines modulatives, via
PowerMod
. Si une solution existe, la plus petite solution possible est renvoyée, sinon l'expression d'origine (plus un message).Pour obtenir une sortie véridique / fausse réelle, nous transmettons le résultat à
AtomQ
, qui vérifie si une expression peut être décomposée. Les entiers sont atomiques, retournantTrue
, tandis que lesPowerMod[q,1/2,n]
retours non atomiquesFalse
Merci à @ MartinBüttner pour les conseils de golf et la recherche de fonctions avec moi.
la source
PowerMod
pouvoir prendre un argument fractionnaire!Par ,
119 octetsChaque caractère utilise un seul octet; voir ici .
Explication
Suppression de deux octets grâce à Jakube.
la source
LabVIEW,
1615 octets équivalentsCompté selon mon meta post .
la source
Haskell, 31 octets
Enregistré 3 octets grâce à Martin Büttner.
la source
q#n=any(\x->mod(x*x)n==q)[0..n]
et pour 30 octets:q#n=[x|x<-[0..n],mod(x*x)n==q]
qui retourne la liste des x / liste vide au lieu de True / False.Matlab, 29
Cette fonction met au carré tous les nombres de 0 à n et vérifie si un carré moins q est zéro mod n.
la source
Prolog (SWI), 34 octets
Code:
Explication:
vérifie si un carré entre 0 et N laisse Q lorsqu'il est divisé par N .
Exemple:
Essayez-le en ligne ici
la source
CJam, 11 octets
Ce bloc sans nom attend
q n
sur la pile et reste[q]
sur la pile comme une valeur véridique ou""
comme valeur fausse.Testez-le ici.
Remerciements à Sp3000 qui a également proposé cette solution mais "ne pouvait pas être dérangé par la publication".
Explication
la source
J, 9 octets
Usage:
Explication:
Quelques anecdotes sur la mécanique J:
Les fonctions sont regroupées par 3 de manière itérative à partir de la droite et s'il y en a une à gauche, comme dans notre cas (
e. (] | (i. ^ 2:))
), la partie groupée est appelée avec l'argument de droite (N
) et la fonction de gauche (e.
, "contient") appelée avec la gauche d'origine argument (Q
) et le résultat de la partie groupée.(
e.]|i.*i.
ete.]|2^~i.
résout également le problème avec la même longueur.)Essayez-le en ligne ici.
la source
Mathematica, 27 octets
Usage:
la source
Javascript ES6, 42 octets
Crédits à @apsilers pour les octets sérieux enregistrés!
la source
...Array
syntaxe? Je ne comprends toujours pas.[...Array(5)]
produit un tableau deundefined
, commeArray(5)
seul. Je suis totalement confus, car supprimer la syntaxe étrange et utiliser neArray(5)
fait que casser le code. Existe-t-il une documentation à ce sujet?capture d'écran de ma consoleArray(5)
est un tableau sans propriétés propres sauflength
. L'étalement du tableau[...x]
remplit les propriétés numériques manquantes jusqu'àlength
. Lamap
fonction ne peut fonctionner que sur les propriétés existantes, quiArray(5)
seules ne l'ont pas. Par exemple, essayezArray(5).hasOwnProperty(0)
(faux) contre[...Array(5)].hasOwnProperty(0)
(vrai).some
est plus courte et (je pense) équivalente:(q,n)=>[...Array(n)].some((x,y)=>y*y%n==q)
Sérieusement , 20 octets
Prend la saisie sur deux lignes:,
q
puisn
. Produit un0
if quiq
n'est pas un résidu quadratique den
, sinon un nombre positif représentant le nombrex
en[1, q]
(inclus) satisfaitx^2 = q (mod n)
.Essayez-le en ligne (les permaliens ont plus de problèmes, mais vous pouvez copier et coller le code dans une page vierge en attendant)
Explication:
la source
Python 3,
4140 octetsPrend
q
etn
détermine si seq
trouve dans une liste de carrés du0
carré aun-1
carré.la source
Rubis,
3331 octetsEnregistré deux octets grâce à Vasu Adari.
Comme d'habitude, Ruby ne battra aucune des langues de golf, mais cela fait une bonne performance ici.
la source
->q,n{}
.Julia, 30 octets
Il s'agit d'une fonction
f
qui accepte deux entiers et renvoie un booléen.Non golfé:
la source
JavaScript (ES6), 43 octets
Explication
Tester
Afficher l'extrait de code
la source
𝔼𝕊𝕄𝕚𝕟, 13 caractères / 25 octets
Try it here (Firefox only).
la source
15 22
et il a ditfalse
.Japt, 10 octets
Mon tout premier golf Japt officiel! Merci à @ETHProductions d'avoir enregistré un octet!
Non golfé / Explication
Essayez-le en ligne!
la source
0oV
est équivalent àVo
.C # 6 (.Net Framework 4.6) dans LinqPad, 60 octets
la source
Voie lactée 1.0.2 , 41 octets
Cela attend
q
etn
d'être uniquement sur la pile. Il génère respectivement un1
ou0
pour la vérité et les fausses valeurs.la source
Pari / GP , 25 octets
Essayez-le en ligne!
la source
JavaScript (Node.js) , 33 octets
Essayez-le en ligne!
Pourquoi personne ne fait ça
la source