qa의 2 차 잔차는 n입니까?


22

주어진 2 개의 입력 q nq이 2 차 잔차 인지를 결정합니다 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

규칙

코드는 프로그램 또는 함수 여야합니다. 입력 순서는 상관 없습니다. 이것은 코드 골프이므로 바이트 단위의 가장 짧은 코드가 이깁니다.

불분명하거나 수정이 필요한 경우 알려주십시오.

보너스

  • 함수 q가 임의의 정수로 허용 되는 경우 2 바이트 보너스 .

목록

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
Bakuriu

답변:


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을 5 ^ 2 mod 9에 해당한다는 사실에도 불구하고 7 9를 입력으로 사용하려고했는데 "False"라고했습니다.
Nick Matteo

@kundor 나는 정수를 역순으로 읽었습니다. 처음 n보다 q. 9\n7입력으로 시도하십시오 .
Jakube

8

Mathematica, 25 바이트

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

Mathematica 인 Mathematica는을 통해 모듈로 근을 계산하기위한 내장 기능을 내장하고 PowerMod있습니다. 솔루션이 존재하면 가능한 가장 작은 솔루션이 리턴되고, 그렇지 않으면 원래 표현식 (메시지)이 리턴됩니다.

실제 진실 / 거짓 출력을 얻으려면 결과를로 전달하여 AtomQ표현식을 분해 할 수 있는지 확인합니다. 정수는 원자 True적이 지 않고을 PowerMod[q,1/2,n]반환하지만 원자가 아닌 반환은False

골프 팁과 기능 사냥을위한 @ MartinBüttner에게 감사합니다.


멍청한 인수 순서
CalculatorFeline

뭐?! 나는 PowerMod소수의 주장을 취할 수 있다는 것을 몰랐다 !
Greg Martin

8

, 11 9 바이트

✶X[²x%)↔,

각 문자는 1 바이트 만 사용합니다. 여기를 참조 하십시오 .

설명

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

Jakube 덕분에 2 바이트가 제거되었습니다.



5

하스켈, 31 바이트

Martin Büttner 덕분에 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]True / False 대신 x / empty 목록을 반환합니다.
nimi

5

MATLAB, 29

이 함수는 0에서 n까지의 모든 숫자를 제곱하고 제곱 빼기 q가 0 mod n인지 여부를 확인합니다.

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

4

프롤로그 (SWI), 34 바이트

암호:

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

설명 :
사이의 광장 확인하면 0N의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

수학, 27 바이트

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

용법:

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

Out[1]= True

3

자바 스크립트 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]은 누락 된 숫자 속성을 최대로 채 웁니다 length. 이 map기능은 존재 Array(5)하지 않는 기존 속성에서만 작동 할 수 있습니다. 예를 들어 Array(5).hasOwnProperty(0)(false) 대 [...Array(5)].hasOwnProperty(0)(true)를 시도하십시오 .
apillers

1
또한, 사용 some이 짧고 (제 생각에) 동등합니다 :(q,n)=>[...Array(n)].some((x,y)=>y*y%n==q)
apsillers

2

진지하게 , 20 바이트

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

q다음 두 줄에 입력 을 n받습니다. 0if q가 2 차 잔차가 아닌 if를 출력하고 그렇지 않으면를 포함 하는 (포함하는) 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 바이트

소요 qn및 여부를 결정 q에서 사각형의 목록에 0에 제곱 n-1제곱.

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


1

줄리아, 30 바이트

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

f두 개의 정수를 허용하고 부울을 리턴 하는 함수 입니다.

언 골프 드 :

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

자바 스크립트 (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

apt, 10 바이트

Vo d_²%V¥U

내 첫 공식 Japt 골프! 바이트를 저장해 준 @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

몰랐어요 감사!
Mama Fun Roll

0

LinqPad의 C # 6 (.Net Framework 4.6), 60 바이트

bool b(int q,int n)=>Enumerable.Range(1,n).Any(y=>y*y%n==q);

0

은하수 1.0.2 , 41 바이트

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

이것은 기대 qn스택에 유일하게 할 수 있습니다. 각각 a 1또는 0true 및 false 값을 출력합니다 .



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.