Maximale Co-Prime-Faktorisierung untereinander


14

Definitionen

  • Zwei Zahlen sind Co-Primzahlen, wenn ihr einziger positiver gemeinsamer Teiler ist 1.
  • Eine Liste von Zahlen ist gegenseitig gleichrangig, wenn jedes Zahlenpaar in dieser Liste gleichrangig ist.
  • Eine Faktorisierung von Zahlen nist eine Liste von Zahlen, deren Produkt ist n.

Aufgabe

Bei einer positiven Zahl nwird die gegenseitige Co-Prim-Faktorisierung nmit der maximalen Länge ausgegeben , die nicht enthalten ist 1.

Beispiel

Denn n=60die Antwort ist [3,4,5], weil 3*4*5=60und keine andere Faktorisierung, ohne 1die keine Länge größer oder gleich 3der Länge der Faktorisierung ist.

Regeln und Freiheiten

  • Sie können jedes sinnvolle Eingabe- / Ausgabeformat verwenden.
  • Die Einträge in der Ausgabeliste müssen nicht sortiert werden.

Testfälle

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]

Wertung

Das ist . Kürzeste Antwort in Bytes gewinnt.




Schwierigere Folgeherausforderung: Nur benachbarte Paare in der resultierenden Liste müssen co-prime sein.
Martin Ender

4
Ist das nur eine Faktorisierung in Primkräfte?
Paŭlo Ebermann

1
@PaŭloEbermann ja, das ist es.
Undichte Nonne

Antworten:



9

Brachylog , 4 Bytes

ḋḅ×ᵐ

Probieren Sie es online!

Erläuterung

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

2
Herzlichen Glückwunsch zu Ihrer ersten Brachylog-Antwort! ... zumindest denke ich?
Fatalize

1
@Fatalize: Mein 2. denke ich. Ich hatte diesen von vorher. Auf jeden Fall meine kürzeste :)
Emigna

5

05AB1E , 3 5 Bytes

+2 Bytes, um den Kantenfall von zu beheben 1. Danke an Riley für den Patch (und für die Testsuite, mein 05ab1e ist nicht so stark!)

ÒγP1K

Testsuite bei Online testen !

Wie?

Ò     - 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 ist das der beste Link für "Bytes" oder gibt es irgendwo eine formatierte Codepage?
Jonathan Allan

Ja, es gibt eine Codepage , die alle Bytes anzeigt.
Adnan

1
Oh, wie habe ich es vermisst?> _ <Vielen Dank :)
Jonathan Allan

Funktioniert nicht für 1.
Undichte Nonne

@LeakyNun mit Hilfe behoben :)
Jonathan Allan


3

Haskell , 51 Bytes

(2#) ist eine anonyme Funktion, die eine Ganzzahl annimmt und eine Liste zurückgibt.

Verwenden Sie als (2#) 99.

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

Probieren Sie es online!

Inspiriert von dem Power-Trick, den einige Leute in der jüngsten Squarefree Number Challenge verwendet haben .

  • m#nerzeugt Faktoren von n, beginnend mit m.
  • Wenn m>nwir aufhören, haben wir abschließend bereits alle Faktoren gefunden.
  • x=gcd(m^n)nist der größte Faktor, ndessen Primfaktoren alle in sind m. Beachten Sie, dass kleinere mzuerst getestet werden, es sei 1denn , es mhandelt sich um eine Primzahl.
  • Wir nehmen xin die sich ergebende Liste auf, wenn es nicht 1 ist, und rekursieren dann mit dem nächsten m, dividierend ndurch x. Beachten Sie, dass xund div n xnicht gemeinsame Faktoren haben.
  • (2#)Nimmt eine Zahl und beginnt, ihre Faktoren aus zu finden 2.

3

MATL , 7 Bytes

&YF^1X-

Probieren Sie es online! Oder überprüfen Sie alle Testfälle .

Erläuterung

Betrachten Sie die Eingabe 80 als Beispiel.

&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. Juni 2017): YFmit zwei Ausgängen wurde in Release 20.1.0 geändert : Nicht-Faktor-Primzahlen und ihre (Null-) Exponenten werden übersprungen. Dies hat keinen Einfluss auf den obigen Code, der ohne Änderungen funktioniert (aber 1X-entfernt werden kann).


Ich gehe davon aus, dass das Änderungsmittel 1X-in der neuen Version überflüssig ist ... auch, dass es für mich eher nach einer festgelegten Differenz als nach einer Überschneidung aussieht.
Ørjan Johansen

@ ØrjanJohansen Richtig bei beiden. Vielen Dank!
Luis Mendo

2

Gelee , 5 Bytes

ÆF*/€

Testsuite bei Online testen !

Wie?

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

Eine alternative 6-Byte - Lösung in einem Versuch , eine andere Methode zu finden , die mit Ihnen (leider nicht an ) binden würde: ÆfŒgZP. Es hat die gleiche Anzahl von Token, aber zu viele Zwei-Byte-Atome;)
HyperNeutrino

... und wie mein gelöschter 05ab1e-Eintrag wird er 1für eine Eingabe zurückgegeben, 1die nicht zulässig ist (die Auswirkung der Ausführung eines leeren Produkts).
Jonathan Allan

:( Na ja, hoppla, hab das übersehen. Darn.: P
HyperNeutrino

2

Alice , 10 Bytes

Ifw.n$@EOK

Probieren Sie es online!

Leider werden hier wieder Codepunkte als Ganzzahl-E / A verwendet . Der Testfall in der TIO-Verbindung ist der Eingang 191808, der in 64 , 81 und 37 zerlegt wird . Beachten Sie, dass diese Lösung die Primzahlen in der Reihenfolge vom größten zum kleinsten Prim druckt, sodass wir die Ausgabe erhalten%Q@ .

Der Einfachheit halber ist hier eine 16-Byte-Lösung mit dezimaler E / A, die denselben Kernalgorithmus verwendet:

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

Probieren Sie es online!

Erläuterung

Wie die anderen antworten, zerlegt dies die Eingabe in Primkräfte.

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 Bytes

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

Probieren Sie es online!


Gute Antwort, aber es gibt für einige Testfälle etwas falsche Ergebnisse. Derzeit wird Ihr Code {}; {2}; {3}; {2}; {5}; {2,3}; {7}; {2}; {3}; {2,5}; {11}; {2,3}; {13}; ... ausgegeben, sollte aber {}; {2}; {3}; {4}; {5}; {2,3}; {7}; {8}; {9}; {2,5}; {11}; {4,3}; {13}; ...stattdessen ausgegeben werden.
Kevin Cruijssen

Ich glaube, ich habe es behoben
J42161217

Scheint in der Tat in TIO zu arbeiten . +1 Oh, und willkommen bei PPCG, ich sehe, dass Sie hier ziemlich neu sind. Sie haben es wahrscheinlich schon gesehen, aber wenn nicht, könnten Tipps zum Golfspielen in Mathematica interessant sein, durchzulesen. Genieße deinen Aufenthalt! :)
Kevin Cruijssen

1
Wenn Sie feststellen, dass Sie auf die Komponenten von #mehr als #sich selbst zugreifen , können Sie eine Menge Bytes sparen, indem Sie Apply( @@@) anstelle von Map( /@) verwenden:#^#2&@@@If...
Martin Ender

1

PHP, 62 Bytes

druckt ein assoziatives Array mit der Primzahl als Schlüssel und wie oft die Primzahl als Wert verwendet wird und nichts für die Eingabe 1

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

Probieren Sie es online!

Ausgabe für 60

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

PHP, 82 Bytes

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

Probieren Sie es online!

Gibt nichts zur Eingabe aus, 1wenn Sie stattdessen ein leeres Array und ein sortiertes Array wünschen, dauert es etwas länger

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 Bytes

Herausforderungen im Zusammenhang mit der Faktorisierung von Primzahlen sind hier schrecklich überrepräsentiert, sodass wir alle leider gezwungen sind, die Faktorisierung in der Standardbibliothek vorzunehmen.

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

Beachten Sie, dass sich "mini" in miniml auf die Größe des Feature-Sets bezieht, nicht auf die Größe des darin geschriebenen Quellcodes.


0

Ruby, 61 Bytes

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

Ich bin wirklich enttäuscht, nachdem ich 6-7-Byte-Lösungen gesucht habe -))


0

Mathematica, 24 Bytes

Power@@@FactorInteger@#&

Schade @@@*ist keine Sache. Auch ich mag /@*, @@*und in der Tat, ändern @@@zu /@@, //@zu @@@oder was auch immer , und fügen Sie die unendliche Familie //@, ///@...

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.