Nhân tố đồng biến tối đa lẫn nhau


14

Các định nghĩa

  • Hai số là đồng nguyên tố nếu ước số chung duy nhất của chúng là 1.
  • Một danh sách các số là cùng một số nguyên tố nếu mỗi cặp số trong danh sách đó là đồng nguyên tố với nhau.
  • Một yếu tố của số nlà một danh sách các số có sản phẩm n.

Bài tập

Cho một số dương n, đưa ra hệ số đồng biến lẫn nhau nvới độ dài tối đa không bao gồm 1.

Thí dụ

n=60, câu trả lời là [3,4,5], bởi vì 3*4*5=60và không có yếu tố đồng biến lẫn nhau nào khác mà không 1có độ dài lớn hơn hoặc bằng 3, độ dài của phép nhân.

Các quy tắc và quyền tự do

  • Bạn có thể sử dụng bất kỳ định dạng đầu vào / đầu ra hợp lý.
  • Các mục trong danh sách đầu ra không cần phải được sắp xếp.

Tủ thử

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]

Chấm điểm

Đây là . Câu trả lời ngắn nhất trong byte thắng.



OEIS cho chuỗi phẳng. (Với vị trí dẫn đầu 1.)
Martin Ender

Thử thách tiếp theo khó hơn: chỉ các cặp liền kề trong danh sách kết quả cần phải là đồng nguyên tố.
Martin Ender

4
Đây có phải chỉ là một yếu tố thành sức mạnh chính?
Paŭlo Ebermann

1
@ PaŭloEbermann vâng, đúng vậy.
Nữ tu bị rò rỉ

Câu trả lời:



9

Brachylog , 4 byte

ḋḅ×ᵐ

Hãy thử trực tuyến!

Giải trình

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

2
Xin chúc mừng câu trả lời Brachylog đầu tiên của bạn! ... ít nhất tôi nghĩ sao?
Gây tử vong

1
@Firthize: Tôi nghĩ thứ 2 của tôi. Tôi đã có cái này từ trước. Chắc chắn là cái ngắn nhất của tôi mặc dù :)
Emigna

5

05AB1E , 3 5 byte

+2 byte để sửa trường hợp cạnh của 1. Cảm ơn Riley về bản vá (và cho bộ thử nghiệm, 05ab1e của tôi không mạnh đến thế!)

ÒγP1K

Bộ thử nghiệm tại Dùng thử trực tuyến!

Làm sao?

Ò     - 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 là liên kết tốt nhất cho "byte" hoặc có một trang mã được định dạng ở đâu đó không?
Jonathan Allan

Vâng, có một trang mã hiển thị tất cả các byte.
Ad Nam

1
Ôi, làm thế nào tôi nhớ nó> _ <Cảm ơn rất nhiều :)
Jonathan Allan

Không làm việc cho 1.
Leaky Nun

@LeakyNun đã sửa chữa với sự giúp đỡ :)
Jonathan Allan


3

Haskell , 51 byte

(2#) là một hàm ẩn danh lấy một số nguyên và trả về một danh sách.

Sử dụng như (2#) 99.

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

Hãy thử trực tuyến!

Lấy cảm hứng từ trò lừa điện mà một số người đã sử dụng trong thử thách số vuông gần đây .

  • m#ntạo ra các yếu tố của n, bắt đầu với m.
  • Nếu m>n, chúng tôi dừng lại, kết luận chúng tôi đã tìm thấy tất cả các yếu tố.
  • x=gcd(m^n)nlà yếu tố lớn nhất trong nđó các yếu tố chính là tất cả m. Lưu ý rằng vì nhỏ hơn mđược kiểm tra trước, nên điều này sẽ 1trừ khi mlà số nguyên tố.
  • Chúng tôi bao gồm xtrong danh sách kết quả nếu nó không phải là 1, và sau đó lặp lại với lần tiếp theo m, chia ncho x. Lưu ý rằng xdiv n xkhông thể có các yếu tố chung.
  • (2#)lấy một số và bắt đầu tìm các yếu tố của nó từ 2.

3

MATL , 7 byte

&YF^1X-

Hãy thử trực tuyến! Hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình

Hãy xem xét đầu vào 80 là một ví dụ.

&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]

EDIT (ngày 9 tháng 6 năm 2017): YFvới hai đầu ra đã được sửa đổi trong bản phát hành 20.1.0 : các số nguyên tố không yếu tố và số mũ (không) của chúng bị bỏ qua. Điều này không ảnh hưởng đến mã trên, hoạt động mà không yêu cầu bất kỳ thay đổi nào (nhưng 1X-có thể được gỡ bỏ).


Tôi cho rằng sự thay đổi có nghĩa 1X-là dư thừa trong bản phát hành mới ... cũng vậy, nó trông giống như sự khác biệt được thiết lập hơn là giao với tôi.
Ørjan Johansen

@ RjanJohansen Đúng cả hai. Cảm ơn!
Luis Mendo

2

Thạch , 5 byte

ÆF*/€

Bộ thử nghiệm tại Dùng thử trực tuyến!

Làm sao?

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

Một giải pháp 6 byte thay thế trong nỗ lực tìm kiếm một phương thức khác sẽ liên kết với phương thức của bạn (không may thất bại) : ÆfŒgZP. Nó có cùng số lượng mã thông báo nhưng có quá nhiều nguyên tử hai byte;)
HyperNeutrino

... và giống như mục 05ab1e đã bị xóa của tôi, nó trả về 1một đầu vào 1không được phép (hiệu ứng của việc thực hiện một sản phẩm trống).
Jonathan Allan

:( Vâng, rất tiếc, đã bỏ qua điều đó. Darn .: P
HyperNeutrino

2

Alice , 10 byte

Ifw.n$@EOK

Hãy thử trực tuyến!

Thật không may, điều này sử dụng các điểm mã làm I / O số nguyên một lần nữa . Trường hợp thử nghiệm trong liên kết TIO là đầu vào 191809 , phân hủy thành 64 , 8137 . Lưu ý rằng giải pháp này in các số nguyên tố theo thứ tự từ lớn nhất đến nhỏ nhất, vì vậy chúng tôi nhận được đầu ra %Q@.

Để thuận tiện, đây là một giải pháp 16 byte với I / O thập phân sử dụng cùng một thuật toán cốt lõi:

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

Hãy thử trực tuyến!

Giải trình

Như các câu trả lời khác, điều này phân tách đầu vào thành các quyền hạn chính.

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

toán học 46 byte

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

Hãy thử trực tuyến!


Câu trả lời hay, nhưng nó cho đầu ra hơi không chính xác cho một số trường hợp thử nghiệm. Hiện tại mã của bạn xuất ra {}; {2}; {3}; {2}; {5}; {2,3}; {7}; {2}; {3}; {2,5}; {11}; {2,3}; {13}; ... nhưng nó nên xuất ra {}; {2}; {3}; {4}; {5}; {2,3}; {7}; {8}; {9}; {2,5}; {11}; {4,3}; {13}; ....
Kevin Cruijssen

Tôi nghĩ rằng tôi đã sửa nó
J42161217

Có vẻ như để làm việc trong TIO thực sự. +1 Ồ, và chào mừng bạn đến với PPCG, tôi thấy bạn khá mới ở đây. Có lẽ bạn đã từng nhìn thấy nó, nhưng nếu không, Mẹo chơi golf trong Mathematica có thể rất thú vị để đọc qua. Tận hưởng kì nghỉ của bạn! :)
Kevin Cruijssen

1
Nếu bạn thấy mình truy cập vào các thành phần của #hơn #bản thân, bạn có thể tiết kiệm rất nhiều byte bằng cách sử dụng Apply( @@@) thay vì Map( /@):#^#2&@@@If...
Martin Ender

1

PHP, 62 byte

in một mảng kết hợp với số nguyên tố là khóa và tần suất sử dụng số nguyên tố làm giá trị và không có gì cho đầu vào 1

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

Hãy thử trực tuyến!

Đầu ra cho 60

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

PHP, 82 byte

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

Hãy thử trực tuyến!

in không có gì cho đầu vào 1nếu bạn muốn một mảng trống thay vào đó và một mảng được sắp xếp nó sẽ dài hơn một chút

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 byte

Những thách thức liên quan đến yếu tố chính được đại diện quá mức ở đây, vì vậy tất cả chúng ta đều bị buộc phải có yếu tố trong thư viện tiêu chuẩn.

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

Lưu ý rằng 'mini' trong miniml đề cập đến kích thước của bộ tính năng, không phải kích thước của mã nguồn được ghi trong đó.


0

Ruby, 61 byte

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

Tôi thực sự thất vọng sau khi tìm kiếm các giải pháp 6-7 byte -))


0

Toán học, 24 byte

Power@@@FactorInteger@#&

Quá tệ @@@*không phải là một điều. Ngoài ra, tôi muốn /@*, @@*và trên thực tế, sự thay đổi @@@để /@@, //@để @@@hoặc bất cứ điều gì và thêm các gia đình vô hạn của //@, ///@...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.