qa กำลังสองตกค้างของ n หรือไม่


22

ได้รับสองปัจจัยการผลิตq nการตรวจสอบว่าเป็นสารตกค้างกำลังสองของqn

นั่นคือจะมีxที่ไหนx**2 == q (mod n)หรือเป็นqตัวดัดแปลงสแควร์n?

อินพุต

สองจำนวนเต็มqและnที่qและเป็นจำนวนเต็มใดn0 <= 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
ในกรณีนี้ฉันคิดว่ามันมีเหตุผลที่จะ "ทำลาย" คำตอบที่มีอยู่บนพื้นฐานที่ว่าพวกเขาไม่ได้ทำตามข้อมูลจำเพาะที่มีอยู่และคุณเพิ่งชี้แจงว่ามันหมายถึงสิ่งที่พูดแทนที่จะเปลี่ยน แต่ตอนนี้มันสายเกินไปแล้ว
ปีเตอร์เทย์เลอร์

คุณสามารถให้โบนัสเล็กน้อยสำหรับโซลูชันที่ยอมรับข้อ จำกัดq
บากูริตู

คำตอบ:


6

Pyth, 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 mod 9
Nick Matteo

@ kundor ฉันอ่านจำนวนเต็มตามลำดับที่กลับรายการ ก่อนnและqหลัง ดังนั้นลอง9\n7ป้อนข้อมูล
Jakube

8

Mathematica ขนาด 25 ไบต์

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

Mathematica เป็น Mathematica ธรรมชาติมีในตัวสำหรับการคำนวณรากที่ n modulo PowerModผ่านทาง หากโซลูชันมีอยู่โซลูชันที่เป็นไปได้ที่เล็กที่สุดจะถูกส่งคืนมิฉะนั้นนิพจน์ดั้งเดิม (บวกกับข้อความ)

เพื่อให้ได้ผลลัพธ์จริง / เท็จที่เกิดขึ้นจริงเราจะส่งผลลัพธ์ไปให้AtomQซึ่งจะตรวจสอบว่านิพจน์สามารถแบ่งย่อยได้หรือไม่ จำนวนเต็มคือปรมาณูกลับมาTrueในขณะที่PowerMod[q,1/2,n]ผลตอบแทนที่ไม่ใช่อะตอมFalse

ขอบคุณ @ MartinBüttnerสำหรับเคล็ดลับการเล่นกอล์ฟและฟังก์ชั่นการล่าสัตว์กับฉัน


การสั่งซื้อข้อโต้แย้งโง่
CalculatorFeline

อะไร?! ฉันไม่เคยรู้เลยว่าPowerModจะมีข้อโต้แย้งบางส่วน!
Greg Martin

8

ที่ตราไว้หุ้น , 11 9 ไบต์

✶X[²x%)↔,

อักขระแต่ละตัวใช้เพียงหนึ่งไบต์ ดูที่นี่

คำอธิบาย

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

นำออกสองไบต์ด้วย Jakube



5

Haskell, 31 ไบต์

บันทึก 3 ไบต์ด้วย Martin Büttner

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 / รายการว่างแทน True / False
nimi

5

Matlab, 29

ฟังก์ชันนี้ยกกำลังสองตัวเลขทั้งหมดจาก 0 ถึง n และตรวจสอบว่าสี่เหลี่ยมจัตุรัสลบ q เป็นศูนย์ดัดแปลง n

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

4

Prolog (SWI) 34 ไบต์

รหัส:

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

คำอธิบาย:
ตรวจสอบว่าตารางใด ๆ ระหว่าง0และไม่มีใบQเมื่อหารด้วยN

ตัวอย่าง:

3*8.
false

15*22.
true

ลองออนไลน์ได้ที่นี่


4

CJam, 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

J, 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)

กลศาสตร์ J บางเรื่อง:

ฟังก์ชั่นจะถูกจัดกลุ่มด้วย 3 ซ้ำจากด้านขวาและหากมีด้านซ้ายเช่นเดียวกับในกรณีของเรา ( e. (] | (i. ^ 2:))) ส่วนที่จัดกลุ่มจะถูกเรียกด้วยอาร์กิวเมนต์ที่ถูกต้อง ( N) และฟังก์ชั่นด้านซ้าย ( e., "มี") ที่เรียกว่า อาร์กิวเมนต์ ( Q) และผลลัพธ์ของส่วนที่จัดกลุ่ม

( e.]|i.*i.และe.]|2^~i.แก้ปัญหาด้วยความยาวเท่ากัน)

ลองออนไลน์ได้ที่นี่



3

Javascript ES6, 42 ไบต์

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

เครดิตไปยัง @apsilers สำหรับการบันทึกไบต์ที่ร้ายแรง!


อะไรคือสิ่งที่...Arrayไวยากรณ์? ฉันยังไม่เข้าใจ
Tomáš Zato - Reinstate Monica

หวังว่าการแก้ไขนี้จะดีกว่าสำหรับคุณ
Mama Fun Roll

[...Array(5)]ผลิตอาร์เรย์ของundefinedเช่นArray(5)เดียวกับคนเดียว ฉันสับสนอย่างสิ้นเชิงเพราะการลบไวยากรณ์แปลก ๆ และใช้เพียงแค่Array(5)แบ่งรหัส มีเอกสารอะไรบ้างสำหรับเรื่องนี้? ภาพหน้าจอคอนโซลของฉัน
Tomáš Zato - Reinstate Monica

1
@ TomášZato เป็นอาร์เรย์ที่ไม่มีคุณสมบัติของตัวเองยกเว้นArray(5) lengthอาร์เรย์กระจายเติมในหายไปคุณสมบัติตัวเลขขึ้นไป[...x] ฟังก์ชั่นเท่านั้นที่สามารถดำเนินการเกี่ยวกับคุณสมบัติที่ยังหลงเหลืออยู่ซึ่งอยู่คนเดียวไม่ได้ ตัวอย่างเช่นลอง(เท็จ) กับ(จริง) lengthmapArray(5)Array(5).hasOwnProperty(0)[...Array(5)].hasOwnProperty(0)
apsillers

1
การใช้someก็สั้นและเทียบเท่า (ฉันคิดว่า):(q,n)=>[...Array(n)].some((x,y)=>y*y%n==q)
apsillers

2

อย่างจริงจัง 20 ไบต์

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

จะเข้ากับสองบรรทัด: แล้วq nเอาท์พุต0ถ้าqไม่ได้เป็นสารตกค้างกำลังสองของnอื่นเป็นจำนวนบวกที่เป็นตัวแทนของหลายวิธีxใน[1, q](รวม) x^2 = q (mod n)ความพึงพอใจ

ลองใช้ออนไลน์ (Permalink กำลังมีปัญหามากขึ้น แต่คุณสามารถคัดลอกและวางรหัสลงในหน้าว่างในระหว่างนี้)

คำอธิบาย:

,;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

Python 3, 41 40 ไบต์

ใช้เวลาqและnและกำหนดว่าqอยู่ในรายการของช่องสี่เหลี่ยมจาก0สแควร์ที่จะn-1ยกกำลังสอง

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

2

Ruby, 33 31 ไบต์

บันทึกสองไบต์ด้วย Vasu Adari

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

ตามปกติรูบี้จะไม่เอาชนะภาษากอล์ฟใด ๆ แต่ก็เป็นการแสดงที่ดีที่นี่


->q,n{}คุณจะสูญเสียการจัดฟันและทำให้มัน
Vasu Adari

@ VasuAdari Cool ฉันไม่ทราบว่า ขอขอบคุณ.
Reinstate Monica iamnotmaynard

1

Julia 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

JavaScript (ES6), 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 เยี่ยมมาก!
Sherlock9

1

ch, 13 ตัวอักษร / 25 ไบต์

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

Try it here (Firefox only).


1
ผมทดสอบโค้ดของคุณมีและก็กล่าวว่า15 22 false
Sherlock9

@ Sherlock9 แก้ไขแล้ว
Mama Fun Roll

ไม่มีเพจรหัสที่กำหนดเองหรือ นี่ไม่ใช่ภาษากอล์ฟ!
CalculatorFeline

ขณะนี้มี แต่หน้ารหัสนานหลังจากการท้าทาย
Mama Fun Roll

1

Japt, 10 ไบต์

Vo d_²%V¥U

กอล์ฟ Japt อย่างเป็นทางการครั้งแรกของฉัน! ขอบคุณ @ETHProductions สำหรับการบันทึกไบต์!

Ungolfed / คำอธิบาย

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

ไม่ทราบว่า ขอบคุณ!
Mama Fun Roll


0

ทางช้างเผือก 1.0.2 , 41 ไบต์

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

สิ่งนี้คาดหวังqและnจะอยู่บนสแต็กเท่านั้น มันเป็นเอาท์พุต1หรือ0สำหรับความจริงและค่าเท็จตามลำดับ



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.