모든 광장을 버리고 나를 갈라 놓는 너희


37

정의

  • 정사각형은 다른 정수의 제곱으로 표현 될 수있는 정수이다. 예를 들어, 36때문에 완벽한 사각형입니다 6^2 = 36.
  • squarefree 수는 제외하고, 어떤 정사각형으로 나눌 수없는 정수입니다 1. 예를 들어, 10제곱이없는 숫자입니다. 그러나, 12때문에하는 squarefree 번호가 아닙니다 12로 나누어 44완벽한 광장입니다.

태스크

양의 정수가 주어지면 n, 가장 큰 제곱수를 나눈 값 을 출력하십시오 n.

테스트 케이스

n   output
1   1
2   2
3   3
4   2
5   5
6   6
7   7
8   2
9   3
10  10
11  11
12  6
13  13
14  14
15  15
16  2
17  17
18  6
19  19
20  10
21  21
22  22
23  23
24  6
25  5
26  26
27  3
28  14
29  29
30  30
31  31
32  2
33  33
34  34
35  35
36  6
37  37
38  38
39  39
40  10
41  41
42  42
43  43
44  22
45  15
46  46
47  47
48  6
49  7
50  10

채점

이것은 입니다. 바이트 단위의 최단 답변이 이깁니다.

표준 허점이 적용됩니다.

참고


1
... 그리고 급진적 이라고 -1980 년대!
Jonathan Allan

밀접하게 관련되어 있으므로 두 출력을 곱하십시오. 편집 : 걱정하지 마십시오. 큐브가없는 숫자에서만 일치합니다.
xnor

답변:


45

05AB1E , 2 바이트

fP

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

작동 원리

f   Implicitly take input and compute the integer's unique prime factors.
 P  Take the product.

26
> _> 정말로 ... ??
HyperNeutrino

@HyperNeutrino yep-숫자에 제곱이없는 경우 소수의 일부 요소에 다중성이 있기 때문입니다.
Jonathan Allan

@JonathanAllan 나는 고유 한 주요 요소에 대한 내장 기능에 관심이 있습니다. 젤리가 그 중 하나를 가지고 있었으면 좋겠어 ...
HyperNeutrino

@HyperNeutrino 그것은 05AB1E입니다. 05AB1E에는 바이트를 절약 할 수있는 중복 구성이 있습니다.
아웃 골퍼 Erik 14

6
수정, "바이트 저장"에 대한 정보는 없을 것입니다.
Draco18s

14

Brachylog , 3 바이트

ḋd×

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

매우 독창적 인 대답 ...

설명

ḋ          Take the prime factors of the Input
 d         Remove duplicates
  ×        Multiply

1
여기서도 2 바이트 원자가 1 바이트에 불과하기 때문에 Brachylog가 Jelly를 이겼습니다. >
:-P

4
내장이 많은 젤리는 종종 장점으로 여겨집니다. 그러나 더 많은 내장은 평균적으로 더 긴 이름이 필요하다는 것을 의미합니다. 따라서 골프 언어 디자인과 관련된 트레이드 오프가 있습니다.

2
나는 "그 사람"이 되려고 노력하지 않고 아마도 바이트 카운트를 오해하지만 6 바이트가 아닌가? mothereff.in/byte-counter#ḋd ×
Captain Man

5
@CaptainMan Brachylog는 여기에서 찾을 수있는 256 개의 문자 사용자 정의 코드 페이지를 사용합니다 .
Fatalize

14

자바 스크립트 (ES6), 55 54 50 46 바이트

OEIS 인용 :
a (n)은 n이 u ^ n을 나누는 n의 가장 작은 제수 u입니다.

업데이트 된 구현 :
a (n)은 n을 u ^ n으로 나누는 n 양의 정수 u 의 가장 작은 제수 u입니다.

let f =

n=>(g=(p,i=n)=>i--?g(p*p%n,i):p?g(++u):u)(u=1)

for(n = 1; n <= 50; n++) {
  console.log(n,f(n));
}


문제에 대한 좋은 접근 방식. 내장 인수 분해가 부족한 경우
Riking



9

CJam , 8 바이트

rimf_&:*

이 프로그램의 모든 조작이 2 바이트 여야하는 이유 -_-

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

ri       e# Read int from input
  mf     e# Get the prime factors
    _&   e# Deduplicate
      :* e# Take the product of the list

중복 제거 방법을 찾을 수 없습니다. 좋은!
Luis Mendo

@LuisMendo 나는 최근에 그것을 발견했다. 나는 항상 그것이 다중 집합 교차점이라고 생각했지만 분명히 정상 교차점입니다.
비즈니스 고양이

9

망막 , 36 30 28 바이트

+`((^|\3)(^(1+?)|\3\4))+$
$3

단항으로 입력 및 출력 .

온라인으로 사용해보십시오! 10 진수 <-> 단항 변환 및 한 번에 여러 테스트 사례를 실행하기위한 머리글과 바닥 글이 포함됩니다.

설명

아이디어는 입력을 제곱 곱하기 일부 요소로 일치시키는 것입니다. 정사각형 일치를위한 기본 정규식은 순방향 참조를 사용하여 연속 홀수 정수의 합을 일치시킵니다.

(^1|11\1)+$

완벽한 정사각형을 일치시키지 않고 정사각형으로 나눌 수있는 숫자를 1역 참조 자체로 대체 합니다.

(^(1+?)|\1\2\2)+$

이제 외부 그룹 1n 번 사용되며 여기서 n 2 는 입력을 나누고 그룹 2이 나머지 요인을 저장하는 가장 큰 제곱입니다 . 우리가 원하는 것은 정수를 n 으로 나누어 제곱을 제거하는 것입니다. 결과는 group 1times group 의 반복 횟수로 표현 될 수 2있지만, 조금 까다 롭습니다. Retina $*는 아마도 문자가 아닌 토큰을 오른쪽 인수로 사용하도록 곧 개선 될 것입니다.이 경우 우리는 이것을 단순히로 바꿀 수는 $#1$*$2있지만 아직 작동하지 않습니다.

대신 홀수를 다르게 분해합니다. 완벽한 제곱을와 일치시키는 간단한 예제로 돌아가 봅시다 (^1|11\1)+$. 반복 할 때마다 1\1 로 초기화 되고 2 씩 증가 하는 카운터를 사용하는 대신 두 개의 카운터가 있습니다. 하나에 초기화되어 0 하나는에 초기화되는 , 그들은 모두 증가하고 1 각 반복에. 그래서 우리는 기본적으로 홀수 2n + 1(n) + (n + 1) 로 분해했습니다 . 이점은 그룹 중 하나에서 n 으로 끝날 것입니다 . 가장 간단한 형태는 다음과 같습니다.

((^|1\2)(^1|1\3))+$

어디 \2이고 N\3입니다 N + 1 . 그러나 한 반복 의 n + 1 이 다음 반복 의 n 과 같다는 것을 알면 좀 더 효율적으로 수행 할 수 있으므로 1여기에서 절약 할 수 있습니다.

((^|\3)(^1|1\3))+$

이제 우리 1는 완벽한 제곱으로 나눈 입력을 맞추기 위해 초기 요소를 사용하는 것으로 돌아 가야합니다 .

((^|\3)(^(1+?)|\3\4))+$

이제 우리가해야 할 일은이 전체를 $3마지막에 바꾸는 것입니다 . 이것은 초기 요인과 단계 수를 저장하여 입력에서 제곱의 한 요인을 떨어 뜨립니다.

이것은 +사각형보다 더 높은 전력을 포함하는 입력을 설명하기 위해 프로그램 시작시 반복적으로 수행됩니다 .



7

볼프람 언어, 29 28 바이트

-1 @Martin Ender 에게 감사합니다

Most[1##&@@FactorInteger@#]&

설명:

           FactorInteger@#    (*Get prime factorization as {{a,b},{c,d}}*)
     1##&@@                   (*Multiply list elements together, to get the product of the factors and the product of their exponents*)
Most[                     ]&  (*Take the first element*)

2
이것이 기본적으로 수학 답변에 대한 @GregMartin의 의견이며, 덜 골치 거리에 불과하다는 것을 깨달았습니다.
Scott Milner

기분 나빠하지, 난 덜 골프 대답을했다Times@@(#&@@@FactorInteger@#)&
이안 밀러

Most목록으로 남겨 둡니다. 당신은 필요한 First값을 얻을 수 있습니다.
Ian Miller

@IanMiller 나는 그것을 알고 있지만 단 하나의 요소로 목록을 반환하는 것은 적은 바이트입니다. 나는 여전히 합리적인 출력이기 때문에 그것이 괜찮다고 가정했습니다.
Scott Milner

7

파이썬 , 37 바이트

f=lambda n,r=1:1>>r**n%n or-~f(n,r+1)

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

최대의 제곱없는 제수는 모든 주요 요소를 가진 n가장 작은 수 r입니다 n. 우리는이를로 확인할 수 r**n%n==0있기 때문에, r**n메이크업의 n각 주요 요소의 사본 r,에 의해 나눌 n의 경우에만 각 n표현의 소인수.

1>>r**n%n동일합니다 int(r**n%n==0). True출력 1을 사용할 수 있으면 2 바이트가 더 짧습니다.

f=lambda n,r=1:r**n%n<1or-~f(n,r+1)

6

수학 , 40 바이트

Times@@(Transpose@FactorInteger@#)[[1]]&

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


Times@@#&@@Transpose@FactorInteger@#&3 바이트를 절약합니다 ( #&@@표준 트릭이며 [[1]]이와 같은 경우 괄호에 여분의 바이트를 저장할 수 있습니다).
Martin Ender

Thread대신에 사용할 수도 있습니다 Transpose. Mathematica에는에 대한 3 바이트 연산자도 Transpose있지만 Mathics가 지원하는지 여부는 모르겠습니다.
마틴 엔더

6
#&@@(1##&@@FactorInteger@#)&함께 할 필요가 없습니다 Transpose. ( 1##&@@그냥 Times@@의해 산출 순서쌍에 좋은 작품 변장에 FactorInteger'#&@@있다 First@변장.)
그렉 마틴

@GregMartin 기본적으로 자신의 솔루션이므로 원하는 경우 자유롭게 게시하십시오.
Pavel

Scott Milner 가 어쨌든 그것을 얻은 것 같습니다 :)
Greg Martin

5

Alice , 4 바이트

iDo@

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

입력 및 출력은 문자의 코드 포인트로 제공 됩니다 (유효한 모든 유니 코드 코드 포인트에서 작동).

설명

Alice는 기본적으로 D"중복 중복 요소"라는 정의가 내장되어 있습니다. 즉, 소수 p 에 대해 값을 일부 p 2 로 나눌 수 있으면 해당 값을 p로 나눕니다 . 이것이 바로이 도전에 필요한 기능입니다. 나머지는 단지 입력, 출력, 프로그램 종료입니다.

이것이 Alice에 추가 된 이유는 실제로이 정수 시퀀스와 관련이 없습니다. 나는 제수를 부분 문자열과 연관시키고 주제와 문자를 연관시키는 주제를 고수하려고했습니다. 그리고 "중복 된 문자"와 함께 사용되는 함수가 필요했습니다 (일반적으로 훨씬 더 유용합니다. 특히 여러 멀티 세트 연산자와 함께 사용될 때 문자열을 세트로 취급 할 수 있기 때문입니다).


슬픈 부분은 내장 기능이 있어도 가장 짧은 답은 아닙니다.
Rɪᴋᴇʀ

@Riker 글쎄, Alice는 골프 언어가 아니기 때문에 명시적인 I / O와 (2D 언어이므로) 프로그램 종료가 필요하기 때문입니다.
마틴 엔더

그래, 그래도 여전히 슬프다.
Rɪᴋᴇʀ

@ ConorO'Brien 우리는 방금 다른 곳에서이 논의를했으며 독립형 연산자가 함수로 평가되는 표현식 인 경우에만 유효합니다 (함수 / 연산자가 일류 값이 아니기 때문에 여기에는 해당되지 않습니다) . codegolf.meta.stackexchange.com/a/7206/8478
Martin Ender

@ ConorO'Brien 죄송합니다 "독점"이었습니다.
마틴 엔더





1

Pyth, 8 6 바이트

*F+1{P

@LeakyNun 덕분에 * -2 바이트

Pyth에 목록 제품에 대한 기본 제공 기능이있는 경우 3이됩니다.

시도 해봐!

*F+1{P
      Q     # Implicit input
     P      # Prime factors of the input
    {       # Deduplicate
  +1        # Prepend 1 to the list (for the case Q==1)
*F          # Fold * over the list

*F+1{P대신 사용할 수 있습니다 .
Leaky Nun

1

C, 65 50 바이트

의 필요성을 제거해 주신 @ Ørjan Johansen에게 감사드립니다 r. 이것과 다른 몇 가지 더러운 트릭 덕분에 15 바이트를 짜낼 수있었습니다!

d;f(n){for(d=1;d++<n;)n%(d*d)||(n/=d--);return n;}

while사라져 ||인덱스 twiddling으로 대체되었습니다 . 함께 <=했을 것 <입니다.

<=로 전환 <얻을 증분 이동하여 n%(++d*d)(도 연산자 우선 순위로 인해 정의되어야한다).


원본 코드 :

d;r;f(n){for(r=d=1;d++<=n;)while(n%d<1)r*=r%d?d:1,n/=d;return r;}

제거 r하고 대신 사용 하여 단축 할 수 있다고 생각합니다 while(n%(d*d)<1)n/=d;.
Ørjan Johansen 님

@ ØrjanJohansen 맞습니다. 나는 축소보다는 건설을 생각하고있었습니다. 추가 할 추가 개선 사항이 있으며 곧 업데이트됩니다.
algmyr

++d*d절대적으로 하지 아니라 C 표준에 의해 정의 - 명시 적으로 정의되지 않은 동작의 고전적인 사례이다. 그러나 우리는 어쨌든 여기서 구현을 진행하고 있습니다.
Ørjan Johansen

실제로, d++<n잘 정의 된, 여전히 작동 하지 않아야 합니까? 나는 구 버전이 n+1(무해하게) 끝났다고 생각한다 .
Ørjan Johansen

당신은 아마도 정의되지 않은 행동에 대해 맞을 것입니다. 어떤 이유로 나는 연산자 우선 순위가 그것을 해결할 것이라고 생각했습니다. UB에서 보았던 대부분의 예제는 동일한 우선 순위 연산자를 사용하지만 물론 여기에도 데이터 경쟁이 있습니다. 당신은 또한 올바른 것에 d++<n대해 맞습니다. 어떤 이유로 나는 코드를 다시 작성할 때 그것을 보지 못했습니다.
algmyr

0

공리, 89 바이트

f(x:PI):PI==(x=1=>1;g:=factor x;reduce(*,[nthFactor(g,i) for i in 1..numberOfFactors g]))

테스트 및 결과

(38) -> [[i, f(i)] for i in 1..30 ]
   (38)
   [[1,1], [2,2], [3,3], [4,2], [5,5], [6,6], [7,7], [8,2], [9,3], [10,10],
    [11,11], [12,6], [13,13], [14,14], [15,15], [16,2], [17,17], [18,6],
    [19,19], [20,10], [21,21], [22,22], [23,23], [24,6], [25,5], [26,26],
    [27,3], [28,14], [29,29], [30,30]]

이것은 factor () 함수를 사용하지 않는 것입니다

g(x:PI):PI==(w:=sqrt(x);r:=i:=1;repeat(i:=i+1;i>w or x<2=>break;x rem i=0=>(r:=r*i;repeat(x rem i=0=>(x:=x quo i);break)));r)

그러나 그것은 단지 125 바이트입니다


0

R, 52 바이트

`if`((n=scan())<2,1,prod(unique(c(1,gmp::factorize(n))))

nstdin에서 읽습니다 . 필요합니다 gmp(TIO 그렇게하지 않습니다 작업)를 설치하는 라이브러리를. 위의 답변의 많은과 같은 방법을 사용하지만의 입력에 충돌 1때문에 factorize(1)클래스의 반환 빈 벡터 bigz충돌, unique아아합니다.


이것은 12를 입력하면 12를 출력합니다.
Flounderer

@ Flounderer 당신이 맞습니다, 나는 코드를 업데이트했습니다.
주세페



0

Pyt , 3 바이트

←ϼΠ

설명:

←                  Get input
 ϼ                 Get list of unique prime factors
  Π                Compute product of list
                   Implicit print
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.