2013 hat die Primfaktorisierung 3*11*61
. 2014 hat die Primfaktorisierung 2*19*53
. Eine interessante Eigenschaft dieser Faktorisierungen in Bezug auf ist , dass es in den Faktorisierungen von 2013 und 2014 diese Summe auf die gleiche Anzahl verschiedene Primzahlen bestehen: 11+61=19+53=72
.
Schreiben Sie ein Programm oder eine Funktion, die zwei positive ganze Zahlen größer als 1 als Eingabe verwendet und einen Wahrheitswert zurückgibt, wenn eine Summe ausgewählter Primfaktoren einer Zahl vorhanden ist, die einer Summe ausgewählter Primfaktoren in der zweiten Zahl entspricht, und a Falscher Wert sonst.
Klarstellungen
- Es können mehr als zwei Primfaktoren verwendet werden. Nicht alle Primfaktoren der Zahl müssen in der Summe verwendet werden. Es ist nicht erforderlich, dass die Anzahl der Primzahlen aus den beiden Zahlen gleich ist.
- Selbst wenn eine Primzahl bei der Faktorisierung einer Zahl auf eine Potenz größer als 1 angehoben wird, kann sie in der Summe der Primzahlen für die Zahl nur einmal verwendet werden.
- 1 ist keine Primzahl.
- Beide Eingabenummern sind kleiner als
2^32-1
.
Testfälle
5,6
5=5
6=2*3
5=2+3
==>True
2013,2014
2013=3*11*61
2014=2*19*53
11+61=19+53
==>True
8,15
8=2^3
15=3*5
No possible sum
==>False
21,25
21=3*7
25=5^2
No possible sum (can't do 3+7=5+5 because of exponent)
==>False
Das ist Code Golf. Es gelten Standardregeln. Kürzester Code in Bytes gewinnt.
true
, da sie den Faktor teilen7
?Antworten:
Julia,
9593 BytesDie primäre Funktion ist
f
und ruft eine Hilfsfunktion aufg
.Ungolfed:
2 Bytes dank Darth Alephalpha gespeichert
quelle
map(p->map
ist kürzer als(m=map)(p->m
.Pyth, 11 Bytes
Eingabe in das Formular
30,7
.quelle
Pyth -
171211 BytesVielen Dank an @FryAmTheEggman für das Korrigieren meiner Antwort und das Speichern eines Bytes.
Test Suite .
quelle
ty
funktioniert und spart ein tschüss?Haskell,
115106 BytesAnwendungsbeispiel:
2013 # 2014
->True
.p
erstellt eine Liste aller Primfaktoren des Arguments, entfernt Duplikate, erstellt eine Liste aller Untersequenzen, löscht die erste (die immer die leere Liste ist) und summiert schließlich die Untersequenzen.#
prüft, obp a
die Differenz ungleich istp a \\ p b
. Wenn nicht gleich, haben sie mindestens ein gemeinsames Element.quelle
Japt, 25 Bytes
Ausgänge
true
oderfalse
. Probieren Sie es online!Ungolfed und Erklärung
Für ein zusätzliches Byte können Sie den Code für die Faktorisierung, die eindeutige Kombination und die Summe zwischen beiden Eingängen aufteilen. Der zusätzliche Vorteil besteht in der zeitlichen Komplexität von
O(O(25-byte version)^2)
:quelle
CJam, 23 Bytes
Teste es hier.
Der Wahrheitswert sind alle gebräuchlichen zusammengesetzten Summen, der falsche Wert ist die leere Zeichenfolge.
Erläuterung
quelle
Brachylog ,
109 BytesProbieren Sie es online!
Das Prädikat gibt erfolgreich zurück,
[the sum, the sum]
wenn es vorhanden ist, und schlägt fehl, wenn die Summe nicht vorhanden ist.-1 Byte dank Fatalize (dem Schöpfer von Brachylog), der mich daran erinnert, dass das Verify- Meta-Prädikat existiert.
quelle
ᵛ - verify
anstelle vonˢ=
ein Byte speichern.MATL , 23 Bytes
Verwendet die aktuelle Version 2.0.2 , die älter als diese Herausforderung ist.
Die Nummern werden als zwei separate Eingänge bereitgestellt. Ausgang ist
0
oder1
.Beispiel
Erläuterung
quelle
Mathematica, 58 Bytes
Erläuterung:
Dies ist eine anonyme Funktion.
Zuerst wird
IntersectingQ
geprüft , ob zwei Listen schneiden. Die Eingaben sind jedoch Zahlen anstelle von Listen, sodass sie nicht ausgewertet werden. Wenn die Eingaben beispielsweise2013
und sind2014
, wirdIntersectingQ@##&
zurückgegebenIntersectingQ[2013, 2014]
.Tr/@Rest@Subsets[#&@@@FactorInteger@#]&
ist eine weitere anonyme Funktion, die eine ganze Zahl annimmt, eine Liste ihrer Primfaktoren ohne Wiederholungen abruft, die Potenzmenge nimmt, die leere Menge entfernt und dann die Summe jeder Menge nimmt. AlsoTr/@Rest@Subsets[#&@@@FactorInteger@#]&[2013]
kehrt zurück{3, 11, 61, 14, 64, 72, 75}
.Dann
Tr/@Rest@Subsets[#&@@@FactorInteger@#]&
über den Ausdruck mappenIntersectingQ[2013, 2014]
.Tr/@Rest@Subsets[#&@@@FactorInteger@#]&[2013]
undTr/@Rest@Subsets[#&@@@FactorInteger@#]&[2014]]
sind Listen, damit wir dieses Mal das Erfassungsergebnis erhalten können.quelle
IntersectingQ
erste ist erstaunlich! :)PARI / GP , 98 Bytes
Factor, grab primes (
[,1]
), loop über nicht leere Subsets, sum und uniq, schneiden dann das Ergebnis für die beiden Zahlen. Der zurückgegebene Wert ist die Anzahl der Schnittpunkte, die wahr ist, sofern sie nicht 0 sind.quelle
APL (Dyalog Extended) ,
23SBCS mit 17 Bytes-5 danke an ngn
Anonyme stillschweigende Infix-Funktion.
Probieren Sie es online!
⍥{
…}
Wenden Sie auf beide Argumente die folgende anonyme Funktion an:⍭
Primfaktoren⍤
dann∪
die einzigartigen von denen0+⍀.,
Additionstabellenreduktion von Null verknüpft mit jedem Faktor∊
ϵ nlist (Abflachen)∩
Der Schnittpunkt⍤
dann≢
die Bilanz von denen1<
gibt es mehr als eine? (Einer, weil die Summe ohne Faktoren)quelle
p+.×⊤1↓⍳2*≢p←
->1↓∊(⊢,+)/0,⍨
1↓∊∘.+/0,¨
1↓∊0∘.+.,
ein inouter produkt - wie oft siehst du das :)⍥
richtig verstehe , sollte das auch funktionieren:1<∘≢∩⍥{∊0∘.+.,∪⍭⍵}
05AB1E ,
108 Bytes-2 Bytes dank @Emigna .
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
f€æO`å¦à
sollte für 8 arbeiten.Japt, 12 Bytes
Führen Sie es online aus
quelle
Python 3 , 206 Bytes
Dies ist eine Lambda-Funktion (m), die zwei Zahlen aufnimmt und eine Menge zurückgibt, die alle Summen von Primfaktoren enthält, die sie gemeinsam haben. In Python ist dies ein wahrer Wert, wenn er nicht leer ist, und ein falscher Wert, wenn er leer ist.
Bearbeiten: Es stellte sich heraus, dass meine ursprüngliche Antwort für Primzahlen nicht funktioniert hat, wie von @JoKing hervorgehoben. Dies wurde (zusammen mit einigen anderen Fehlern) auf tragische Kosten von 40 Byte behoben.
Schnelle Erklärung mit Kommentaren:
Probieren Sie es online!
quelle
5,6
, da er keine Primzahlen verarbeitetAPL (NARS), 50 Zeichen, 100 Byte
hier würde π die Reihe von Faktoren in seinem Argument finden;
wäre die funktion, die alle teilmengen findet ... ich muss sagen, dass es so aussieht, als ob {⍵operator itsArguments} ¨ (für jede linke) und ¨ (für jede rechte) loop mit fester zykluszahl imitieren kann und ¨¨ in ok ist um Teilmengen einer Menge zu sehen ... auf diese Weise scheint es, dass Symbole in Beschreibungsschleifen reduziert werden ...; Prüfung
Eine kleine Analyse:
quelle
Japt
-¡
, 14 Bytes3 Bytes gespart dank @Shaggy
Versuch es
quelle
ÎfUÌ l
oder noch kürzer seinrf l
.rø
Das wäre der kürzeste Weg, aber Oliver hat dich geschlagen.Jelly ,
189 BytesProbieren Sie es online!
Vielen Dank an Jonathan Allan für -9 und die tolle Hilfe :).
Übernimmt die Eingabe als Array von zwei Elementen. Code Erklärung:
¹
quelle
,
. DasẒƇ
ist überflüssig, es gibt keine Nicht-Primfaktoren. DannÆFḢ€
ist es gerechtÆf
, mit der Ausnahme, dass letzteres uns die Wiederholungen gibt, die wir zum Beispiel26=2*13
und125=5*5*5
währenddessen tatsächlich benötigen2+13=5+5+5
. Auch das ist jedochẆ
nicht gut genug, zum Beispiel anstatt zu26
verwenden,182=2*7*13
was auch nicht gut genug sein sollte2+13=5+5+5
- stattdessen wollen wir das power-set (ŒP
) ohne das führende, leere Element (das wir verwenden könnenḊ
).S€
hier kann ersetzt werden durch§
. - Mit$
undƊ
- können Sie wahrscheinlich Bytes speichern .)
und mit meinen Fixes ist der Code 9 Bytes lang (plus Ersetzenœ&
durchf
):ÆfŒPḊ§)f/
try-itGaia ,
1611 BytesProbieren Sie es online!
Die obere Funktion (erste Zeile) berechnet die Summen des Potenzsatzes der Primfaktoren und die zweite Funktion ermittelt, ob eines der Elemente der Schnittmenge ungleich Null ist.
quelle