최대 상호 공동 프라임 분해


14

정의

  • 양의 공통 제수가 유일한 인 경우 두 숫자는 공동 프라임 입니다 1.
  • 해당 목록 내의 모든 숫자 쌍이 서로 공동 프라임 인 경우 숫자 목록은 상호 공동 프라임입니다.
  • 숫자의 인수 분해는 n제품이 인 숫자 목록입니다 n.

직무

양수가 주어진 n경우을 n포함하지 않는 최대 길이와의 공통 코 프라임 분해를 출력합니다 1.

에 대한 n=60답은 [3,4,5], 3*4*5=60인수 분해의 1길이보다 크거나 같은 길이를 갖지 않는 다른 상호-프라이머 분해 는 없기 때문 3입니다.

규칙과 자유

  • 합리적인 입 / 출력 형식을 사용할 수 있습니다.
  • 출력 목록의 항목을 정렬 할 필요는 없습니다.

테스트 케이스

n   output
1   []
2   [2]
3   [3]
4   [4]
5   [5]
6   [2, 3]
7   [7]
8   [8]
9   [9]
10  [2, 5]
11  [11]
12  [3, 4]
13  [13]
14  [2, 7]
15  [3, 5]
16  [16]
17  [17]
18  [2, 9]
19  [19]
20  [4, 5]
21  [3, 7]
22  [2, 11]
23  [23]
24  [3, 8]
25  [25]
26  [2, 13]
27  [27]
28  [4, 7]
29  [29]
30  [2, 3, 5]
31  [31]
32  [32]
33  [3, 11]
34  [2, 17]
35  [5, 7]
36  [4, 9]
37  [37]
38  [2, 19]
39  [3, 13]
40  [5, 8]
41  [41]
42  [2, 3, 7]
43  [43]
44  [4, 11]
45  [5, 9]
46  [2, 23]
47  [47]
48  [3, 16]
49  [49]
50  [2, 25]
51  [3, 17]
52  [4, 13]
53  [53]
54  [2, 27]
55  [5, 11]
56  [7, 8]
57  [3, 19]
58  [2, 29]
59  [59]
60  [3, 4, 5]
61  [61]
62  [2, 31]
63  [7, 9]
64  [64]
65  [5, 13]
66  [2, 3, 11]
67  [67]
68  [4, 17]
69  [3, 23]
70  [2, 5, 7]
71  [71]
72  [8, 9]
73  [73]
74  [2, 37]
75  [3, 25]
76  [4, 19]
77  [7, 11]
78  [2, 3, 13]
79  [79]
80  [5, 16]
81  [81]
82  [2, 41]
83  [83]
84  [3, 4, 7]
85  [5, 17]
86  [2, 43]
87  [3, 29]
88  [8, 11]
89  [89]
90  [2, 5, 9]
91  [7, 13]
92  [4, 23]
93  [3, 31]
94  [2, 47]
95  [5, 19]
96  [3, 32]
97  [97]
98  [2, 49]
99  [9, 11]

채점

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




보다 까다로운 후속 과제 : 결과 목록에서 인접한 쌍만 공동 프라임이면됩니다.
마틴 엔더

4
이것이 단지 주요한 힘으로의 ​​인수 분해입니까?
Paŭlo Ebermann

1
@ PaŭloEbermann 예, 그렇습니다.
Leaky Nun

답변:



9

Brachylog , 4 바이트

ḋḅ×ᵐ

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

설명

       # output is the list of
  ×ᵐ   # products of each
 ḅ     # block of consecutive equal elements
ḋ      # of the prime factors
       # of the input

2
첫 번째 Brachylog 답변을 축하합니다! ... 적어도 나는 생각합니까?
치명적

1
@ 운명 : 내 생각합니다. 나는 전에부터 이것을 가지고 있었다 . 확실히 나의 가장 짧은 것 :)
Emigna

5

05AB1E , 3 5 바이트

의 경우를 수정하려면 +2 바이트입니다 1. 패치에 대한 Riley 덕분에 (그리고 테스트 스위트의 경우, 05ab1e는 그렇게 강력하지 않습니다!)

ÒγP1K

온라인 사용해보기 테스트 스위트 !

어떻게?

Ò     - prime factorisation, with duplicates
 γ    - split into chunks of consecutive equal elements
  P   - product of each list
   1  - literal one
    K - removed instances of top from previous
      - implicitly display top of stack

@Adnan은 "바이트"에 가장 적합한 링크입니까, 아니면 형식화 된 코드 페이지가 있습니까?
Jonathan Allan

예, 모든 바이트를 표시 하는 코드 페이지 가 있습니다.
Adnan

1
오, 어떻게 그리웠 어> _ <정말 고마워 :)
Jonathan Allan

작동하지 않습니다 1.
Leaky Nun

@LeakyNun 도움으로 수정 :)
Jonathan Allan


3

하스켈 , 51 바이트

(2#) 정수를 사용하여 목록을 반환하는 익명 함수입니다.

로 사용하십시오 (2#) 99.

m#n|m>n=[]|x<-gcd(m^n)n=[x|x>1]++(m+1)#div n x
(2#)

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

일부 사람들이 최근에 무료로 사용하는 숫자 도전에 사용 된 파워 트릭에서 영감을 얻었습니다 .

  • m#nn시작 하는의 요소를 생성합니다 m.
  • 인 경우 m>n중지하고 모든 요소를 ​​이미 찾았습니다.
  • x=gcd(m^n)nn의 주요 요인이 모두 있는 최대 요인입니다 m. 더 작은 m것이 먼저 테스트 되기 때문에 , 이것이 프라임 이 1아닌 경우 m입니다.
  • 우리는 포함 x이 일하지, 그리고 그 다음에 재귀 경우 결과 목록에서 m분할 n에 의해 x. 참고 xdiv n x공통 요소를 가질 수 없습니다.
  • (2#)숫자를 가져와에서 인수를 찾기 시작합니다 2.

3

MATL , 7 바이트

&YF^1X-

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .

설명

80 예를 들어 입력 을 고려하십시오 .

&YF    % Implicit input. Push array of unique prime factors and array of exponents
       % STACK: [2 3 5], [4 0 1]
^      % Power, element-wise
       % STACK: [16 1 5]
1      % Push 1
       % STACK: [16 1 5], 1
X-     % Set difference, keeping order. Implicitly display
       % STACK: [16 5]

편집 (2017 년 6 월 9 일) : 릴리스 20.1.0YF 에서 두 가지 출력으로 수정되었습니다 : 비 요소 소수 및 제로 지수는 건너 뜁니다. 이것은 위의 코드에 영향을 미치지 않으며 변경하지 않고도 작동하지만 제거 할 수 있습니다.1X-


1X-새 릴리스 에서는 변경 수단 이 중복되어 있다고 가정합니다 . 또한 교차점이 아니라 설정된 차이처럼 보입니다.
Ørjan Johansen 2016 년

@ ØrjanJohansen 둘 다 맞습니다. 감사!
Luis Mendo 2016 년

2

젤리 , 5 바이트

ÆF*/€

온라인 사용해보기 테스트 스위트 !

어떻게?

ÆF*/€ - Main link: n
ÆF    - prime factors as [prime, exponent] pairs
   /€ - reduce €ach with:
  *   - exponentiation

귀하와 관련이있는 다른 방법을 찾기위한 대체 6 바이트 솔루션 (불행히도 실패) : ÆfŒgZP. 토큰의 개수는 동일하지만 2 바이트 원자가 너무 많습니다.)
HyperNeutrino

... 그리고 삭제 된 05ab1e 항목과 같이 1입력 1이 허용되지 않는 경우 (빈 제품을 수행하는 효과)를 반환 합니다 .
Jonathan Allan

:( 음, 으악, 간과했습니다. Darn. : P
HyperNeutrino

2

Alice , 10 바이트

Ifw.n$@EOK

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

불행히도 이것은 코드 포인트를 정수 I / O로 다시 사용합니다 . TIO 링크의 테스트 케이스는 입력 191808 이며 이는 64 , 8137 로 분해됩니다 . 이 솔루션은 가장 큰 소수에서 가장 작은 소수까지 순서대로 출력을 출력하므로 출력을 얻습니다 %Q@.

편의상, 동일한 코어 알고리즘을 사용하는 10 진 I / O가있는 16 바이트 솔루션이 있습니다.

/O/\K
\i>fw.n$@E

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

설명

다른 답변으로, 이것은 입력을 주요한 힘으로 분해합니다.

I      Read a code point as input.
f      Compute its prime factorisation a prime/exponent pairs and push them
       to the stack in order from smallest to largest prime.
w      Remember the current IP position on the return address stack. This
       starts a loop.
  .      Duplicate the current exponent. This will be zero once all primes
         have been processed.
  n$@    Terminate the program if this was zero.
  E      Raise the prime to its corresponding power.
  O      Output the result as a character.
K      Return to the w to run the next loop iteration.

2

수학 46 바이트

#[[1]]^#[[2]]&/@If[#==1,#={},FactorInteger@#]&

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


좋은 대답이지만 일부 테스트 사례에 대해 약간 잘못된 출력을 제공합니다. 현재 코드가 출력 {}; {2}; {3}; {2}; {5}; {2,3}; {7}; {2}; {3}; {2,5}; {11}; {2,3}; {13}; ... 되지만 {}; {2}; {3}; {4}; {5}; {2,3}; {7}; {8}; {9}; {2,5}; {11}; {4,3}; {13}; ...대신 출력되어야 합니다.
케빈 크루이 센

나는 그것을 고쳤다 고 생각한다
J42161217

실제로 TIO 에서 작동하는 것 같습니다 . +1 아, 그리고 PPCG에 오신 것을 환영합니다. 이미 본 적이 있지만 그렇지 않은 경우 Mathematica의 골프 팁 을 읽는 것이 흥미로울 수 있습니다. 체류를 즐길 수! :)
Kevin Cruijssen

1
당신의 구성 요소에 액세스하는 자신을 발견하면 #더 이상의 #자체, 당신은 사용하여 바이트을 많이 절약 할 수 있습니다 Apply( @@@대신) Map( /@)#^#2&@@@If...
마틴 청산

1

PHP, 62 바이트

소수를 키로 사용하여 연관 배열을 인쇄하고 소수는 얼마나 자주 값으로 사용되며 입력을 위해 아무것도 사용하지 않습니다. 1

for($i=2;1<$n=&$argn;)$n%$i?++$i:$n/=$i+!++$r[$i];print_r($r);

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

출력 60

Array
(
    [2] => 2
    [3] => 1
    [5] => 1
)

PHP, 82 바이트

for($i=2;1<$n=&$argn;)$n%$i?++$i:$n/=$i+!($r[$i]=$r[$i]?$r[$i]*$i:$i);print_r($r);

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

1빈 배열 대신 정렬 된 배열을 원하면 입력을 위해 아무것도 인쇄하지 않습니다.

for($r=[],$i=2;1<$n=&$argn;)$n%$i?++$i:$n/=$i+!($r[$i]=$r[$i]?$r[$i]*$i:$i);sort($r);print_r($r);



0

miniML , 47 바이트

소인수 분해와 관련된 문제는 여기서 과장되게 표현되어 있으므로 슬프게도 표준 라이브러리에서 인수 분해를 수행해야합니다.

fun n->map(fun p->ipow(fst p)(snd p))(factor n)

miniml에서 'mini'는 작성된 소스 코드의 크기가 아니라 기능 세트의 크기를 나타냅니다.


0

루비, 61 바이트

require 'prime'
->n{(2..n).select{|e|n/e.to_f%1==0&&e.prime?}}

6-7 바이트 솔루션을 본 후 정말 실망합니다-))


0

Mathematica, 24 바이트

Power@@@FactorInteger@#&

너무 나쁜 @@@*것은 아닙니다. 또한, 내가 좋아하는 것 /@*, @@*그리고 사실, 변화 @@@/@@, //@@@@또는 무엇이든 그리고 무한한 가족을 추가 //@, ///@...

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