Einführung
Ihr Ziel ist es, die kleinste Anzahl zu finden, die Sie addieren oder multiplizieren müssen, um den Eingabewert zu erhalten. Dies ist A005245 .
Eingang
Eine positive ganze Zahl N .
Ausgabe
Die kleinste Anzahl von Einsen, die addiert / multipliziert werden müssen, um N zu erhalten .
Sample Input
7
Beispielausgabe
6
Erläuterung
(
1
+1
+1
) * (1
+1
) +1
= 7Da dies
6
Einsen erfordert , ist die Ausgabe6
Testfälle
1 1
2 2
3 3
5 5
10 7
20 9
50 12
Da dies eine Code-Golf- Herausforderung ist, gewinnt die niedrigste Anzahl von Bytes.
code-golf
sequence
arithmetic
integer
expression-building
Spyrali Chyuu
quelle
quelle
f(x) != x.primeFactorisation().sum()
außer 1?Antworten:
Python 2 ,
74-70BytesProbieren Sie es online!
Alternative Version, 59 Bytes (nicht überprüft)
Dies funktioniert mindestens bis zu n = 1.000.000 , aber ich muss noch beweisen, dass es für alle positiven n funktioniert .
Probieren Sie es online!
quelle
n=a*j+b
mitb<j
, aber könnten wir brauchenb>=j
?b>=j
undb>=a
. Aber du hast recht, es ist nicht offensichtlich, dass dies nicht passieren wird.a*b+c*d
mita,b,c,d
allen Summationsausdrücken und sind sehr effizient.Gelee ,
16 bis14 BytesDanke Dennis, dass du 2 Bytes gespart hast!
Probieren Sie es online!
Logik Erklärung
Gegeben eine Nummer n :
1
ja, lautet die Antwort1
. Andernfalls:Die Darstellung ist entweder
a + b
odera × b
, woa
undb
sind Ausdrücke.Berücksichtigen Sie alle möglichen Werte von
a
undb
:a + b
, danna
undb
sind in Reichweite[1 .. n-1]
.a × b
,a
undb
sind richtige Teiler vonn
größer als1
.In beiden Fällen wird die Liste
[[<proper divisors of n larger than 1>], [1, 2, ..., n-1]]
berechnet (ÆḌḊ,Ṗ
), der aktuelle Link wird über jede Zahl߀€
abgebildet, die richtigen Paare werden addiert (+U$
) und der Mindestwert wird ermittelt (FṂo
).Code Erklärung
quelle
JavaScript (ES6),
10896 BytesSehr ineffizient;
Array(n>>1)
beschleunigt es leicht auf Kosten eines Bytes. Erklärung:n%++i
Isti
nicht Null, wenn kein Faktor ist,n%++i/0
ist es alsoInfinity
(und daher wahr und auch definitiv nicht minimal), wenni
es kein Faktor ist, aberNaN
(und daher falsch), wenni
es ein Faktor ist. Bearbeiten: 12 Bytes mit Inspiration von @ edc65 gespeichert.quelle
f(50)
aber leider hat Windows Update meinen PC neu gestartet, bevor es beendet werden konnte.a
Array scannt. Kannst du nicht die Bewertungen in den 2 Lambdas zusammenführen und die Minute nehmen?(i+=2)
anderes++i
also ich insgesamt 12 Bytes, danke!Pari / GP , 66 Bytes
Ein Port von Dennis 'Python-Antwort :
Probieren Sie es online!
Pari / GP , 72 Bytes
Länger, aber effizienter:
Probieren Sie es online!
quelle
f(n)=vecmin(concat(n,[f(j)+f(n\j)+f(n%j)|j<-[2..n-1]]))
.Pari / GP , 213 Bytes
Edit: Ich bin schwer geschlagen worden .
Probieren Sie es online!
quelle
Python 2 , 181 Bytes
Probieren Sie es online!
quelle
f
darf nicht anonym sein, da sie sich selbst rekursiv aufruft.Wolfram Language (Mathematica) , 59 Bytes
3 Bytes gespart dank Martin Ender. Bei Verwendung der CP-1252-Codierung
±
ist ein Byte erforderlich.Probieren Sie es online!
quelle
±
stattf
spart 3 Byte die Quelle unter der Annahme , in CP 1252 codiert wird: tio.run/##y00syUjNTSzJTE78///QRkNbQ@tDG/PirWx9M/...Perl 5 , -p 78 Bytes
79 Bytes im alten Stil zählen (
+1
z-p
)Die Tatsache, dass Perl
$
für alle skalaren Zugriffe ein Extra verwenden muss, schadet der Länge von Golfplätzen, die viel arithmetisches ...Diese Methode ähnelt größtenteils den bereits veröffentlichten Methoden (versuchen Sie Multiplikation und Addition, um eine Zielzahl zu erstellen, nehmen Sie die billigste). Es wird jedoch nicht wiederholt heruntergefahren, sodass es für relativ große Eingaben verwendet werden kann.
Es wird auch nicht versucht, die Kosten für das Erstellen einer Zahl durch Addition oder Multiplikation zu minimieren, da Perl 5 keine eingebaute
min
und numerische Sortierung keine ausreichende ist (wie aus der Sortierung noch im Code ersichtlich ist). Stattdessen gehe ich einfach davon aus, dass ich die Multiplikation verwenden werde, wenn eine Zahl ein Faktor des Ziels ist. Das ist sicher, denn wenn zB3
ein Faktor von12
(so summiert er die Kosten von3
und12/3
) später in der Schleife ist, wird geprüft,9=12-3
welcher kein Faktor ist, also9+3
mit den gleichen Kosten3+9
, die sowieso ausprobiert werden. Dies kann jedoch für Ziele fehlschlagen<= 4
(dies gilt nur für1
und2
). Das Hinzufügen$_
zur Liste, um das zu minimieren, behebt das. Was bedauerlich ist, da ich das eigentlich nicht für die Basisfälle benötige, weil ich es bereits initialisiere@;
mit den richtigen Startwerten kostet also 3 Bytes.Probieren Sie es online!
quelle