Maksimum karşılıklı ortak birincil çarpanlara ayırma


14

Tanımlar

  • İki sayılardır eş asal onların tek olumlu ortak böleni ise 1.
  • Bu listedeki her sayı çifti birbiriyle eşdeyse , bir sayı listesi karşılıklı olarak birlikte yapılır.
  • Sayının çarpanlara ayrılması n, ürünü olan sayıların listesidir n.

Görev

Pozitif bir sayı verildiğinde , içermeyen maksimum uzunluk ile nkarşılıklı ortak faktörleştirmeyi çıktılayın .n1

Misal

Çünkü n=60cevap şudur [3,4,5], çünkü 3*4*5=60çarpanlara ayırma 1uzunluğundan daha büyük veya ona eşit olmayan başka karşılıklı ortak birincil çarpanlara 3ayırma.

Kurallar ve özgürlükler

  • Herhangi bir makul giriş / çıkış biçimini kullanabilirsiniz.
  • Çıkış listesindeki girişlerin sıralanması gerekmez.

testcases

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]

puanlama

Bu . Bayt cinsinden en kısa cevap kazanır.




Daha zor takip zorluğu: sadece sonuç listesindeki bitişik çiftlerin ortak olması gerekir.
Martin Ender

4
Bu sadece ana güçlere çarpanlara ayırma mı?
Paŭlo Ebermann

1
@ PaŭloEbermann evet, öyle.
Sızdıran Rahibe

Yanıtlar:



9

Brachylog , 4 bayt

ḋḅ×ᵐ

Çevrimiçi deneyin!

açıklama

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

2
İlk Brachylog cevabınız için tebrikler! ... en azından sanırım?
17'de

1
@Fatalize: Sanırım 2nci. Ben bunu daha önce gelen. Kesinlikle benim en kısa olanı olsa :)
Emigna

5

05AB1E , 3 5 bayt

Kenar büyüklüğünü düzeltmek için +2 bayt 1. Yama için Riley'ye teşekkürler (ve test takımı için, 05ab1e'm o kadar güçlü değil!)

ÒγP1K

Deney paketi de çevrimiçi deneyin!

Nasıl?

Ò     - 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 "bayt" için en iyi bağlantı veya bir yerde biçimlendirilmiş bir kod sayfası var mı?
Jonathan Allan

Evet, tüm baytları gösteren bir kod sayfası var.
Adnan

1
Oh, nasıl özledim> _ <Çok teşekkür ederim :)
Jonathan Allan

İçin çalışmıyor 1.
Sızdıran Rahibe

@LeakyNun yardım ile düzeltildi :)
Jonathan Allan


3

Haskell , 51 bayt

(2#) bir tamsayı alan ve bir liste döndüren anonim bir fonksiyondur.

Olarak kullan (2#) 99.

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

Çevrimiçi deneyin!

Son karesız sayı meydan okumada kullanılan bazı insanlar güç hilesinden esinlenerek .

  • m#nnile başlayan faktörler üretir m.
  • Eğer m>ndurursak, tüm faktörleri zaten bulduğumuza karar verirsek.
  • x=gcd(m^n)nnasal faktörlerinin hepsi içinde olan en büyük faktördür m. mİlk önce daha küçük test edildiğinden, bu birincil 1olmadığı sürece olacağını unutmayın m.
  • Biz dahil xo 1 değil, ve ardından bir sonraki ile recurse eğer çıkan listede mbölünerek, ntarafından x. Unutmayın xve div n xortak faktörleri olamaz.
  • (2#)bir sayı alır ve etkenlerini bulmaya başlar 2.

3

MATL , 7 bayt

&YF^1X-

Çevrimiçi deneyin! Veya tüm test senaryolarını doğrulayın .

açıklama

Girişi 80 örnek olarak ele alalım.

&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 (9 Haziran 2017): 20.1.0 sürümündeYF iki çıkışla değiştirildi : faktör olmayan primerler ve (sıfır) üsleri atlanır. Bu, herhangi bir değişiklik gerektirmeden çalışan (ancak 1X-kaldırılabilen) yukarıdaki kodu etkilemez .


Değişim araçlarının 1X-yeni sürümde gereksiz olduğunu varsayıyorum ... ayrıca, bu bana kavşaktan ziyade ayarlanmış bir farka benziyor.
Ørjan Johansen

@ ØrjanJohansen Her ikisi de doğru. Teşekkürler!
Luis Mendo

2

Jöle , 5 bayt

ÆF*/€

Deney paketi de çevrimiçi deneyin!

Nasıl?

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

Sizinkiyle bağdaştıracak başka bir yöntem bulmak için alternatif 6 baytlık bir çözüm (maalesef başarısız) ÆfŒgZP. Aynı sayıda jetona sahip ancak çok fazla iki bayt atomu var;)
HyperNeutrino

... ve silinen 05ab1e girişim gibi 1, girişine 1izin verilmeyen (boş bir ürün gerçekleştirmenin etkisi) için geri döner .
Jonathan Allan


2

Alice , 10 bayt

Ifw.n$@EOK

Çevrimiçi deneyin!

Ne yazık ki, kod noktalarını tekrar tamsayı I / O olarak kullanır . TIO bağlantısındaki test durumu, 64 , 81 ve 37'ye ayrışan giriş 191808'dir . Bu çözümün en büyükten en küçüke kadar ana güçleri yazdırdığını unutmayın, böylece çıktıyı alırız .%Q@

Kolaylık sağlamak için, aynı çekirdek algoritmasını kullanan ondalık G / Ç'ye sahip 16 baytlık bir çözüm:

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

Çevrimiçi deneyin!

açıklama

Diğer cevaplar gibi, bu da girdiyi asal güçlere ayrıştırır.

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

mathematica 46 bayt

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

Çevrimiçi deneyin!


Güzel cevap, ancak bazı test vakaları için biraz yanlış çıktı veriyor. Şu anda kodunuz çıktı {}; {2}; {3}; {2}; {5}; {2,3}; {7}; {2}; {3}; {2,5}; {11}; {2,3}; {13}; ... veriyor, ancak bunun {}; {2}; {3}; {4}; {5}; {2,3}; {7}; {8}; {9}; {2,5}; {11}; {4,3}; {13}; ...yerine çıktı almalı .
Kevin Cruijssen

Sanırım
tamir

Gerçekten de TIO'da çalışıyor gibi görünüyor . +1 Oh, ve PPCG'ye hoş geldiniz, burada oldukça yeni olduğunuzu görüyorum. Muhtemelen daha önce görmüşsünüzdür, ancak değilse Mathematica'da golf oynamak için ipuçları okumak ilginç olabilir. Keyfini çıkarın! :)
Kevin Cruijssen

1
Eğer bileşenlerini erişen bulursanız #fazla #kendisi, sen kullanarak bayt bir çok kaydedebilirsiniz Apply( @@@yerine) Map( /@):#^#2&@@@If...
Martin Ender

1

PHP, 62 Bayt

asal olarak anahtarla ilişkili bir dizi ve asalın ne sıklıkta değer olarak kullanıldığını ve girdi 1

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

Çevrimiçi deneyin!

İçin çıktı 60

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

PHP, 82 Bayt

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

Çevrimiçi deneyin!

giriş için baskılar şey 1bir boş dizi yerine diliyorum ve sıralanmış bir dizi biraz daha uzun olacaksa

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 bayt

Asal çarpanlara ayırma ile ilgili zorluklar burada çok fazla temsil ediliyor, bu yüzden hepimiz standart kütüphanede çarpanlara ayırmaya zorlanıyoruz.

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

Minimledeki 'mini' öğesinin, içinde yazılı kaynak kodunun boyutunu değil, özellik kümesinin boyutunu ifade ettiğini unutmayın.


0

Ruby, 61 bayt

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

6-7 baytlık çözümlere baktıktan sonra gerçekten hayal kırıklığına uğradım -))


0

Mathematica, 24 bayt

Power@@@FactorInteger@#&

Çok kötü @@@*bir şey değil. Ayrıca, ben istiyorum /@*, @@*ve aslında, değişim @@@için /@@, //@için @@@ya da her türlü ve sonsuz ailesini eklemek //@, ///@...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.