क्या क्यू का द्विघात अवशेष है?


22

यह देखते हुए कि दो इनपुट 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>


5
कुछ मौजूदा जवाब मान रहे हैं कि 0 <= q < n। आपको शायद यह स्पष्ट करना चाहिए कि यह स्वीकार्य धारणा है या नहीं।
पीटर टेलर

1
मैं इसे पसंद किया है | qऔर nकिसी भी दो पूर्णांकों हो सकता है, लेकिन तो मैं मौजूदा जवाब नहीं टूटते,0 <= q < n
Sherlock9

2
इस मामले में, मैंने इस आधार पर मौजूदा उत्तरों को "तोड़ना" उचित समझा होगा कि वे मौजूदा युक्ति का पालन नहीं कर रहे थे और आप केवल यह स्पष्ट कर रहे थे कि इसका मतलब यह था कि इसे बदलने के बजाय इसका क्या अर्थ था, लेकिन अब बहुत देर हो चुकी है।
पीटर टेलर

जवाबों:


6

अजगर, 9 बाइट्स

}Em%*ddQQ

इसे ऑनलाइन आज़माएँ: प्रदर्शन या टेस्ट सूट

स्पष्टीकरण:

}Em%*ddQQ   implicit: Q = first input number
  m     Q   map all numbers d of [0, 1, ..., Q-1] to:
    *dd       d*d
   %   Q      mod Q
            this gives the list of all quadratic residues
 E          read another input number
}           check, if it appears in the list of quadratic residues

मैंने इनपुट के रूप में 7 9 लगाने की कोशिश की, और यह कहा कि "झूठी", इस तथ्य के बावजूद कि 7 5 ^ 2 मॉड 9. के बराबर है
निक मैट्टे

@kundor मैंने उलटे क्रम में पूर्णांक पढ़े। पहले nऔर से q। इसलिए 9\n7इनपुट के रूप में प्रयास करें ।
21

8

गणितज्ञ, 25 बाइट्स

AtomQ@PowerMod[#,1/2,#2]&

Mathematica, Mathematica होने के नाते, स्वाभाविक रूप से modulo nth जड़ों की गणना करने के लिए एक बेसिन है PowerMod। यदि कोई समाधान मौजूद है तो सबसे छोटा संभव समाधान लौटा दिया जाता है, अन्यथा मूल अभिव्यक्ति (एक संदेश)।

एक वास्तविक सत्य / मिथ्या आउटपुट प्राप्त करने के लिए हम परिणाम को पास करते हैं AtomQ, जो यह जांचता है कि क्या अभिव्यक्ति को तोड़ा जा सकता है। Trueनॉन-एटॉमिक PowerMod[q,1/2,n]रिटर्न के समय , इंटीजर परमाणु वापस लौट रहे हैंFalse

@ गोल्फ टिप्स के लिए @ मार्टिनबटनर और मेरे साथ शिकार करने के लिए धन्यवाद।


स्टूपिड तर्क क्रम
कैलक्यूलेटरफलाइन

क्या?! मैं कभी नहीं जानता था कि PowerModएक भिन्नात्मक तर्क हो सकता है!
ग्रेग मार्टिन

8

बराबर , ११ ९ बाइट्स

✶X[²x%)↔,

प्रत्येक चरित्र सिर्फ एक बाइट का उपयोग करता है; यहाँ देखें

व्याख्या

✶              ## Read two numbers
X              ## Assign second to x
[              ## Map
 ²             ## Square
 x%            ## Mod x
)              ## 
↔              ## Swap
,              ## Count

Jakube के लिए धन्यवाद दो बाइट्स निकाले।



5

हास्केल, 31 बाइट्स

मार्टिन ब्यूटनर को 3 बाइट्स धन्यवाद से बचाया।

q#n=elem q[mod(x^2)n|x<-[1..n]]

1
इसके अलावा 31 बाइट्स: q#n=any(\x->mod(x*x)n==q)[0..n]और 30 बाइट्स के लिए: q#n=[x|x<-[0..n],mod(x*x)n==q]जो ट्रू / फाल्स की जगह x / खाली सूची की सूची देता है।
नीमी

5

मतलूब, २ ९

यह फ़ंक्शन 0 से n तक की सभी संख्याओं को वर्ग करता है और जाँचता है कि एक वर्ग ऋण शून्य शून्य मॉड n है।

@(q,n)any(~mod((0:n).^2-q,n))

4

प्रोलॉग (एसडब्ल्यूआई), 34 बाइट्स

कोड:

Q*N:-between(0,N,X),X*X mod N=:=Q.

स्पष्टीकरण:
जांच करें कि क्या के बीच किसी भी वर्ग 0 और एन पत्ते क्यू जब से विभाजित एन

उदाहरण:

3*8.
false

15*22.
true

इसे यहाँ ऑनलाइन आज़माएँ


4

सीजेएम, 11 बाइट्स

{_,2f#\f%&}

यह अनाम ब्लॉक q nस्टैक पर उम्मीद करता है और स्टैक [q]पर एक सत्य मान के ""रूप में या एक मिथ्या मूल्य के रूप में छोड़ देता है।

इसका परीक्षण यहां करें।

Sp3000 को क्रेडिट जो भी इस समाधान के साथ आए थे, लेकिन "पोस्टिंग को परेशान नहीं किया जा सका"।

व्याख्या

_,  e# Duplicate n and turn into range [0 1 ... n-1]
2f# e# Square each element in the range.
\f% e# Take each element in the range modulo n.
&   e# Set intersection with q to check if any square yields q (mod n).

4

जे, 9 बाइट्स

e.]|i.^2:

उपयोग:

   1 (e.]|i.^2:) 5
1
   3 (e.]|i.^2:) 8
0
   15 (e.]|i.^2:) 22
1

स्पष्टीकरण:

e.]|i.^2:
    i.    [0..N-1]
      ^   to the power of
       2: 2 (constant 2 function)
  ]|      mod N       
e.        contains Q? (0/1 result)

कुछ जे यांत्रिकी सामान्य ज्ञान:

कार्यों को दायीं ओर से 3 पुनरावृत्तियों द्वारा समूहीकृत किया जाता है और यदि कोई बायीं ओर होता है, जैसा कि हमारे मामले में ( e. (] | (i. ^ 2:))), समूहित भाग को सही तर्क ( N) और बायें आउट फ़ंक्शन ( e."समाहित") के साथ मूल बायें से पुकारा जाता है तर्क (Q ) और समूहीकृत भाग का परिणाम है।

( e.]|i.*i.और e.]|2^~i.एक ही लंबाई के साथ समस्या को हल करता है।)

इसे यहाँ ऑनलाइन आज़माएँ।


3

गणितज्ञ, 27 बाइट्स

PowerModList[#,1/2,#2]!={}&

उपयोग:

In[1]:= PowerModList[#,1/2,#2]!={}&[1,5]

Out[1]= True

3

जावास्क्रिप्ट ईएस 6, 42 बाइट्स

(q,n)=>[...Array(n)].some((x,y)=>y*y%n==q)

सहेजे गए गंभीर बाइट्स के लिए @apsilers का श्रेय!


...Arrayवाक्य रचना क्या है ? मैं अभी भी नहीं मिला।
टॉम ज़ातो -

आशा है कि यह संपादन आपके लिए बेहतर है।
मामा फन रोल

[...Array(5)]की सरणी पैदा करता है undefined, Array(5)अकेले के रूप में । मैं पूरी तरह से भ्रमित हूं, क्योंकि अजीब वाक्य रचना को हटाने और Array(5)कोड का उपयोग करने से बस टूट जाता है। क्या इसके लिए कोई दस्तावेज है? मेरा कंसोल स्क्रीनशॉट
टॉम ज़ातो -

1
@ TomášZato Array(5)एक ऐसा सरणी है, जिसमें खुद के अलावा कोई गुण नहीं है length। सरणी-प्रसार [...x]गुम संख्यात्मक गुणों को भरता है lengthmapसमारोह एकमात्र विद्यमान गुण, जिस पर काम कर सकते हैं Array(5)अकेले नहीं है। उदाहरण के लिए, कोशिश Array(5).hasOwnProperty(0)(झूठा) बनाम [...Array(5)].hasOwnProperty(0)(सच्चा)।
अप्सिलर्स

1
इसके अलावा, का उपयोग someकम है और (मुझे लगता है) समकक्ष:(q,n)=>[...Array(n)].some((x,y)=>y*y%n==q)
apsillers 21

2

गंभीरता से , 20 बाइट्स

,;R@,;╗@%╝`ª╜@%╛=`MΣ

दो लाइनों पर इनपुट लेता है: qफिर n। आउटपुट एक 0अगर qकी द्विघात अवशेषों नहीं है n, और एक सकारात्मक संख्या का प्रतिनिधित्व करने के लिए कितने xमें [1, q](सम्मिलित) को संतुष्ट x^2 = q (mod n)

इसे ऑनलाइन आज़माएं (पर्मलिंक में अधिक समस्याएँ हैं, लेकिन आप इस बीच कोड को एक रिक्त पृष्ठ में कॉपी और पेस्ट कर सकते हैं )

स्पष्टीकरण:

,;R      get q input, duplicate, push range(1, q+1)
@,;╗     move the list to the back of the stack, get n input, dupe, save in reg 0
@%╝      calculate q mod n and save to reg 1
`ª╜@%╛=` push this function:
  ª╜@%     square top of stack, push reg 0 value (n), swap, and mod
  ╛=       push reg 1 value (q mod n), compare equality (1 if equal else 0)
MΣ       map the function across the range, add results

2

पायथन 3, 41 40 बाइट्स

ले जाता है qऔर nऔर अगर निर्धारित करता है qवर्गों की एक सूची में है से 0करने के लिए चुकता n-1वर्ग।

lambda q,n:q in[i*i%n for i in range(n)]

2

माणिक, 33 31 बाइट्स

दो बाइट्स को वासु अदारी को धन्यवाद दिया।

->q,n{(1..n).any?{|e|e*e%n==q}}

हमेशा की तरह रूबी ने गोल्फ की किसी भी भाषा को नहीं हराया, लेकिन यह यहां अच्छा प्रदर्शन कर रही है।


आप ब्रेसिज़ खो सकते हैं और इसे बना सकते हैं ->q,n{}
वासु अडारी

@VasuAdari कूल, मुझे नहीं पता था कि। धन्यवाद।
मोनिका iamnotmaynard

1

जूलिया, 30 बाइट्स

f(q,n)=q∈[i^2%n for i=0:n-1]

यह एक फंक्शन है f जो दो पूर्णांक को स्वीकार करता है और एक बूलियन देता है।

Ungolfed:

function f(q::Integer, n::Integer)
    # Generate an array of quadratic residues
    x = [i^2 % n for i = 0:n-1]

    # Determine whether q is one of these values
    return q  x
end

1

जावास्क्रिप्ट (ईएस 6), 43 बाइट्स

(q,n)=>eval('for(x=n,r=0;x--;)r+=x*x%n==q')

व्याख्या

(q,n)=>
  eval(`              // eval allows us to use a for loop without {} or return
    for(x=n,r=0;x--;) // iterate over all possible values of x
      r+=x*x%n==q     // r = the number of matching x values
  `)                  // implicit: return r

परीक्षा


यह सच / फाल्सी स्थिति @ user81655 पर एक बहुत ही दिलचस्प है। उत्कृष्ट कार्य!
शर्लक

1

S, 13 चार्ट / 25 बाइट्स

⟦Ѧí]ĉ⇀_²%í≔î)

Try it here (Firefox only).


1
मैंने आपके कोड का परीक्षण किया 15 22और यह कहा false
शर्लक

@ शर्लक 9 फिक्स्ड।
मामा फन रोल

कोई कस्टम कोडपेज नहीं? यह एक गोल्फ भाषा नहीं है!
कैलक्यूलेटरफेलीन

अब है, लेकिन चुनौती के लंबे समय बाद कोड पेज बनाया गया था।
मम्मा फन रोल

1

जाप, 10 बाइट्स

Vo d_²%V¥U

मेरा पहला आधिकारिक जाप गोल्फ कभी! एक बाइट को बचाने के लिए @ETHProductions के लिए धन्यवाद!

अघोषित / स्पष्टीकरण

Vo d_  ²  %V¥ U
Vo dZ{Zp2 %V==U}  // implicit: U,V = inputs
Vo                // Create a range from 0 to n-1
   dZ{         }  // Check if any element Z in the range satisfies the condition:
       Zp2        // Is Z squared...
           %V     // modulo n...
             ==U  // equal to q?
                  // implicit output

इसे ऑनलाइन आज़माएं!


1
अच्छा! संकेत: 0oVके बराबर है Vo
ETHproductions 22

नहीं पता था कि धन्यवाद!
मामा फन रोल


0

मिल्की वे 1.0.2 , 41 बाइट्स

:>&{~1-:2h<:>n>;:>;<<b?{_a0_^}~;?{_0_1}}!

यह उम्मीद है qऔर nढेर पर पूरी तरह किया जाना है। यह क्रमशः सत्य और असत्य मूल्यों के लिए 1या आउटपुट देता है 0



हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.