광장은 어떻게 끝납니 까?


20

Base-10에서 모든 완전 제곱은 0 , 1 , 4 , 5 , 6 또는 9로 끝납니다 .

Base-16에서 모든 완벽한 제곱은 0 , 1 , 4 또는 9로 끝납니다 .

Nilknarf는 이것이 왜 그리고이 답변 에서 이것을 잘 해결하는 방법을 설명하지만 여기에 간단한 설명도 제공합니다.

Base-10 숫자 N을 제곱 할 때 "1"자릿수는 "십"자릿수 또는 "100"자릿수 등의 영향을받지 않습니다. 만에 "사람"숫자 N은 의 "사람"자리에 영향을 N (2) 쉬운 (그러나 아마 golfiest를) 방법은 모든 가능한 마지막 자리를 찾을 수 있도록하기위한, N 2를 찾는 것입니다 n은 2 모드 (10)는 모두 0 <= N < 10 . 각 결과는 가능한 마지막 숫자입니다. Base-m의 경우 모든 0 <= n < m에 대해 n 2 mod m 을 찾을 수 있습니다.

입력 N이 주어지면 Base-N의 완벽한 제곱을 위해 가능한 모든 마지막 숫자를 출력 하는 프로그램을 작성하십시오 (중복없이). 당신은 가정 할 수 N이 보다 큰 , 그리고 N는 것을 작은 충분 N 2 오버 플로우 (당신이 모든 방법을 테스트 할 수 있습니다하지 않을 경우 N (2)는 , 내가 당신에게 브라우니 점의 유한 한 양을 줄 것이다하지만 알고 브라우니 포인트와 실제 포인트의 환율은 1에 무한대입니다.

테스트 :

 Input -> Output
 1     -> 0
 2     -> 0,1
 10    -> 0,1,5,6,4,9
 16    -> 0,1,4,9
 31    -> 0,1,2,4,5,7,8,9,10,14,16,18,19,20,25,28
 120   -> 0,1,4,9,16,24,25,36,40,49,60,64,76,81,84,96,100,105

이것은 이므로 표준 규칙이 적용됩니다!

(: 당신은 너무 쉽게이를 발견 한 경우, 또는 당신은이 질문에 고려 주제에 대한보다 깊이있는 질문을 할 직각의 차 잔류 물 시험을위한 기지의 최소 덮개 ).


1
출력 배열을 정렬해야합니까?
얽히고 설킨

@Shaggy Nope! Mego, 복제는 허용되지 않습니다. 이론적으로 N은 엄청나게 많을 수 있으므로 복제본은 출력을 읽을 수 없게 만듭니다. 나는 질문을 인정할 것이다
Farquaad 주님

세트 출력이 허용됩니까?
완전히 인간적인

2
@totallyhuman 왜 유효하지 않습니까? 세트는 비 순서 모음이며 정렬되어서는 안됩니다 .
Mr. Xcoder

답변:



19

Google 스프레드 시트, 52 51 47 바이트

=ArrayFormula(Join(",",Unique(Mod(Row(A:A)^2,A1

Taylor Scott 덕분에 4 바이트 절약

시트는 수식 끝에 자동으로 4 개의 닫는 괄호를 추가합니다.

결과를 오름차순으로 반환하지는 않지만 올바른 결과를 반환합니다.

Results


성스러운 소, 살해당한 사람! 누가 생각 했을까? +1
bearacuda13

1
이것은 지금까지 내가 가장 좋아하는 대답입니다.
Farquaad 군주

@LordFarquaad 나는 놀랐고 이것이 매우 잘 받아 들였다. 나는 비록 범위가 제한되어 있기 때문에 시트와 엑셀에서 더 많은 골프를하려고 노력했습니다. 많은 배열 수식으로 이어졌습니다.
엔지니어 토스트


@TaylorScott 감사합니다! 나는 최근에 어딘가에서-아마도 당신의 대답 중 하나에-그 트릭을 사용하고 그것을 사용하는 것을 기억해야합니다.
엔지니어 토스트

6

05AB1E , 5 바이트

Lns%ê

온라인으로 사용해보십시오! 또는 테스트 스위트

L     # Range 1 .. input
 n    # Square each
  s%  # Mod by input
    ê # Uniquify (also sorts as a bonus)

s여기서 어떻게 작동합니까? 입력이 반복됩니까?
Luis Mendo

@LuisMendo spop a,b; push b,a입니다. 명령이 스택에서 무언가를 팝하려고 할 때 남은 것이 없으면 다음 입력이 사용됩니다. 더 이상 입력이 없으면 마지막 입력이 사용됩니다 ( 여기 예제가 있습니다 ). 이 경우 ¹첫 번째 입력을 푸시하지만 s테스트 스위트에 더 잘 작동 하는 것을 사용할 수 있습니다 .
Riley

감사. 입력이 재사용되는 기준에 대한 자세한 정보가 있습니까? (세 개의 입력이 있고 빈 스택에서 두 개의 값을 팝하려고하면)?
Luis Mendo

1
@LuisMendo 입력은 다 떨어질 때까지 순서대로 사용 된 다음 마지막 요소를 계속 사용합니다. 스택이 각 입력으로 순서대로 채워지고 무한 요소의 마지막 요소가 채워진 것처럼 상상할 수 있습니다.
Riley

@LuisMendo Ln¹%ê는 여기서 동일합니다. s.
매직 문어 Urn

6

스위프트 , 47 35 32 * 바이트

* @Alexander 덕분에 -3.

아마도 역사상 처음으로 Swift의 관계 가 Python을 능가합니까?

{m in Set((0..<m).map{$0*$0%m})}

온라인으로 사용해보십시오!


설명

  • (0..<m).map{}-범위를 반복 [0...m)하고 다음 결과를 매핑합니다.

  • $0*$0%m-각 정수 모듈러스의 제곱은 밑변 m입니다.

  • Set(...) -중복을 제거합니다.

  • m in -밑을 변수에 할당 m


사용자 이름 확인 중 ... 잠시만 기다리십시오.
Rohan Jhunjhunwala

1
파이썬보다 더 낫습니다. 즉 인상적 ! 나는 일어날 날을 보지 못할 것이라고 생각했다.
Caleb Kleveter

@CalebKleveter 감사합니다! 난 당신이 인상적 :) 발견 기뻐요
씨 Xcoder


3

자바 스크립트 (ES6), 52 바이트

f=(m,k=m,x={})=>k?f(x[k*k%m]=m,k-1,x):Object.keys(x)

테스트 사례


비 재귀 버전, 60 58 바이트

@ThePirateBay 덕분에 2 바이트 절약

m=>(a=[...Array(m).keys()]).filter(v=>a.some(n=>n*n%m==v))

테스트 사례


비 재귀 58 바이트 :m=>(a=[...Array(m).keys()]).filter(v=>a.some(n=>n*n%m==v))

@ThePirateBay 잘 잡았습니다. 감사.
Arnauld


3

Brachylog , 10 9 바이트

>ℕ^₂;?%≜ᶠ

온라인으로 사용해보십시오!

설명

       ≜ᶠ       Find all numbers satisfying those constraints:
    ;?%           It must be the result of X mod Input where X…
  ^₂              …is a square…
>ℕ                …of an integer in [0, …, Input - 1]

나는 {>≜^₂;?%}ᵘ대안 으로 제안 하려고했지만 ... 음수도 있다는 것을 깨달았습니다. > _ <
Outgolfer 에릭

1
@EriktheOutgolfer 커밋이 TIO로 가져 오면 실제로이 답변을 실제로 9 바이트로 줄일 수 있습니다 .
페이탈 라이즈

음 ... 음수가있을 때 어떻게 작동합니까? 단순히 그것들이나 무언가를 무시할 것입니까?
Outgolfer Erik

@EriktheOutgolfer mod는 나눗셈의 나머지로 정의 될 수 있으며, 양수일 것입니다 (몫이 부호를 나타냄). 편집 : 또한 사각형은 긍정적입니다.
jaxad0127

@ jaxad0127 >음수 afaik을 설명하기 때문에 이것이 사실이라고 생각하지 않습니다 .
Outgolfer Erik

3

Japt , 7 6 바이트

Dz%UÃâ

그것을 테스트

Oliver 덕분에 1 바이트 절약


설명

정수의 묵시적 입력 U.

Ç   Ã

에서 0까지 의 정수 배열을 U-1만들고 각각 함수를 통해 전달합니다.

²

광장.

%U

모듈 U.

â

배열의 모든 고유 요소를 가져오고 결과를 내재적으로 출력합니다.


1
나는 범위가 포괄적이어야한다고 생각하지 않습니다. Dz%UÃâ잘 작동하는 것 같습니다.
Oliver


2

Actually, 11 bytes

;╗r⌠²╜@%⌡M╔

Try it online!

Explanation:

;╗r⌠²╜@%⌡M╔
;╗           store a copy of m in register 0
  r          range(m)
   ⌠²╜@%⌡M   for n in range:
    ²          n**2
     ╜@%       mod m
          ╔  remove duplicates

2

CJam, 12 bytes

{_,_.*\f%_&}

Anonymous block accepting a number and returning a list.

Try it online!

Explanation

_,          Copy n and get the range [0 .. n-1]
  _.*       Multiply each element by itself (square each)
     \f%    Mod each by n
        _&  Deduplicate

Nice! I had {:X{_*X%}%_&} for 13 bytes
Luis Mendo

2

Haskell, 45 bytes

import Data.List
f m=nub[n^2`mod`m|n<-[0..m]]

-4 bytes from Anders Kaseorg

Try it online!


Sadly point-free version f m=nub$map((`mod`m).(^2))[0..m] is just as long, unless there is a sneaky syntax to get rid of extra parentheses.
shooqie




1

JavaScript (ES6), 48 bytes

f=
n=>[...new Set([...Array(n)].map((_,i)=>i*i%n))]
<input type=number min=0 oninput=o.textContent=f(+this.value)><pre id=o>

43 bytes if returning a Set instead of an array is acceptable.


1

Scala, 32 30 bytes

Simple use of the easy tip from OP.

(0 to n-1).map(x=>x*x%n).toSet

Try it online!

-2 bytes thanks to @MrXcoder, with priorities (no need for () around * operation)

Wondering: is this possible to implicitly tell the compiler to understand things like (0 to n-1)map(x=>x*x%n)toSet (without having to import scala.language.postfixOps)?


1
(0 to n-1).map(x=>x*x%n).toSet for 30 bytes. Exponentiation has higher precedence than modulo.
Mr. Xcoder

@Mr.Xcoder ooh~ thanks :)
V. Courtois


0

Retina, 70 bytes

.+
$*

;$`¶$`
1(?=.*;(.*))|;1*
$1
(1+)(?=((.*¶)+\1)?$)

D`1*¶
^|1+
$.&

Try it online! Warning: Slow for large inputs. Slightly faster 72-byte version:

.+
$*

$'¶$';
1(?=.*;(.*))|;1*
$1
+s`^((1+)¶.*)\2
$1
^1+

D`1*¶
^|1+
$.&

Try it online!



0

Perl 6, 19 bytes

{set (^$_)»²X%$_}

Test it

Expanded:

{ # bare block lambda with implicit param 「$_」

  set        # turn the following into a Set (shorter than 「unique」)

      (
        ^$_  # a Range upto (and excluding) 「$_」
      )»²    # square each of them (possibly in parallel)

    X%       # cross modulus the squared values by

      $_     # the input
}

0

Pyth, 13 bytes

VQ aY.^N2Q){Y

Try online.

Lame attempt at explaining:

VQ               for N in [0 .. input-1]
                   blank space to supress implicit print inside the loop
     .^N2Q         N ^ 2 % input
   aY              append that to Y, which is initially an empty list
          )      end for
           {Y    deduplicate and implicit print

To sort the output, insert an S on any side of the {

I think there should be a shorter way...


1
Yeah, the functional style of Pyth tends to be much more concise. map is your friend!
Anders Kaseorg





0

PHP, 53 bytes

for(;$i<$t=$argv[1];)$a[$z=$i++**2%$t]++?:print"$z
";

Loop from 0 to the input number, using the n^2 mod base formula to mark numbers that have been used. It goes to that position in an array, checking if it's been incremented and outputting it if it hasn't. It then increments it afterwards so duplicate values don't get printed.

Try it online!


0

8th, 138 131 bytes

Code

[] swap dup >r ( 2 ^ r@ n:mod a:push ) 1 rot loop rdrop ' n:cmp a:sort ' n:cmp >r -1 a:@ swap ( tuck r@ w:exec ) a:filter rdrop nip

Explanation

[] - Create output array

swap dup >r - Save input for later use

( 2 ^ r@ n:mod a:push ) 1 rot loop - Compute square end

rdrop - Clean r-stack

' n:cmp a:sort - Sort output array

' n:cmp >r -1 a:@ swap ( tuck r@ w:exec ) a:filter rdrop nip - Get rid of consecutive duplicates from array

SED (Stack Effect Diagram) is: a -- a

Usage and example

: f [] swap dup >r ( 2 n:^ r@ n:mod a:push ) 1 rot loop rdrop ' n:cmp a:sort ' n:cmp >r -1 a:@ swap ( tuck r@ w:exec ) a:filter rdrop nip ;

ok> 120 f .
[0,1,4,9,16,24,25,36,40,49,60,64,76,81,84,96,100,105]

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