Definitionen
Lass m
und n
sei positive ganze Zahlen. Wir sagen , dass m
ist ein Divisor Drall von , n
wenn es ganze Zahlen existiert , 1 < a ≤ b
so dass n = a*b
und m = (a - 1)*(b + 1) + 1
. Wenn m
kann bezogen werden , n
indem keine oder mehr Teiler Drehungen , um es, dann m
ist ein Nachkomme von n
. Beachten Sie, dass jede Zahl ein eigener Nachkomme ist.
Zum Beispiel betrachten n = 16
. Wir können a = 2
und wählen b = 8
, da 2*8 = 16
. Dann
(a - 1)*(b + 1) + 1 = 1*9 + 1 = 10
was zeigt, dass 10
ist ein Teiler Twist von 16
. Mit a = 2
und sehen b = 5
wir dann, dass dies 7
eine Divisor-Wendung von ist 10
. Also 7
ist ein Nachkomme von 16
.
Die Aufgabe
n
Berechnen Sie bei einer positiven Ganzzahl die Nachkommen von n
in aufsteigender Reihenfolge ohne Duplikate.
Regeln
Sie dürfen keine integrierten Operationen verwenden, die die Teiler einer Zahl berechnen.
Es werden sowohl vollständige Programme als auch Funktionen akzeptiert, und die Rückgabe eines Sammlungsdatentyps (wie einer Reihe von Datensätzen) ist zulässig, sofern er sortiert und duplikationsfrei ist. Die niedrigste Byteanzahl gewinnt, und Standardlücken sind nicht zulässig.
Testfälle
1 -> [1]
2 -> [2] (any prime number returns just itself)
4 -> [4]
16 -> [7, 10, 16]
28 -> [7, 10, 16, 25, 28]
51 -> [37, 51]
60 -> [7, 10, 11, 13, 15, 16, 17, 18, 23, 25, 28, 29, 30, 32, 43, 46, 49, 53, 55, 56, 60]
quelle
<
für die natürlichen Zahlen definieren, erhalten Sie für jedes n eine kleinere Zahl, jedoch nicht für sich. Ich denke das sollte etwas ähnliches sein. Auf diese Weise denke ich, dass nur 4 sein eigener Nachkomme wäre (da bin ich mir allerdings nicht sicher).Antworten:
Python 2,
109988582 BytesNachkommen sind seit
(a-1)*(b+1)+1 == a*b-(b-a)
undb >= a
immer kleiner oder gleich der ursprünglichen Zahl. Wir können also einfach mit der Anfangszahl beginnen und streng kleinere Nachkommen erzeugen, bis keine mehr übrig sind.Die Bedingung
(n<x*x)>n%x
prüft zwei Dinge in einem - dasn<x*x
undn%x == 0
.(Danke an @xnor, dass er 3 Bytes aus dem Basisfall entfernt hat)
Pyth, 32 Bytes
Direkte Übersetzung des oben Gesagten, mit Ausnahme der Tatsache, dass Pyth zu ersticken scheint, wenn versucht wird, (
s
) auf einer leeren Liste zu summieren .Dies definiert eine Funktion,
y
die durch Anhängeny<number>
am Ende wie folgt aufgerufen werden kann ( versuchen Sie es online ):CJam,
4745 BytesMit ein paar Modifikationen auch mit der gleichen Methode. Ich wollte CJam zum Vergleich ausprobieren, aber leider bin ich bei CJam viel schlechter als bei Pyth / Python, daher gibt es wahrscheinlich viel Raum für Verbesserungen.
Das Obige ist ein Block (im Grunde genommen CJams Version von unbenannten Funktionen), der ein int aufnimmt und eine Liste zurückgibt. Sie können es so testen ( online ausprobieren ):
quelle
set()
? Können Sie nicht einfach die sortierte Liste zurückgeben?set()
ist es, Duplikate zu entfernen :)[n]+sum(...,[])
wiesum(...,[n])
?[]
als eine Basis für das Zusammenfassen von Listen verwendet, also habe ich es komplett vergessen!Java,
148146104 BytesGolf Version:
Lange Version:
Ich mache mein Debüt in PPCG mit diesem Programm, das a
TreeSet
(das die Zahlen zum Glück automatisch sortiert) und eine Rekursion verwendet, die dem Programm von Geobits ähnelt, aber auf eine andere Art und Weise, indem ich nach Vielfachen von n suche und sie dann in dem Programm verwende nächste Funktion. Ich würde sagen, dies ist eine ziemlich gute Punktzahl für einen Anfänger (insbesondere mit Java, das nicht die ideale Sprache für diese Art von Dingen zu sein scheint, und der Hilfe von Geobits).quelle
a*b
zun
Zeile 9 wechseln .c=n+a-b
hineinlegenadd()
. Alternativ könnten Sie sich auch ganz entledigenc
und nurn+a-b
an beiden Stellen dieselben zwei Bytes verwenden.add
zweimal verwenden muss. Warte einen Moment ...a
, von dem Sie wissenn
, dass er sauber unterteilt ist , sollten Sie keine Schleife ausführen, um zu findenb
, es ist einfachn/a
. An diesem Punkt kommt es meinen immer näher;)Java,
157121Hier ist eine rekursive Funktion, die die Nachkommen jedes Nachkommen von abruft
n
. Es wird ein zurückgegebenTreeSet
, das standardmäßig sortiert ist.Mit einigen Zeilenumbrüchen:
quelle
Octave,
10796Pretty-Print:
quelle
end
stattendfor
undendfunction
. Das würde Ihnen 11 Bytes sparen.Haskell,
102100 BytesVerwendung:
p 16
welche Ausgänge[7,10,16]
Die Funktion
d
berechnet rekursiv alle Nachkommen, sucht jedoch nicht nach Duplikaten, sodass viele mehr als einmal vorkommen, z. B.d [4]
eine unendliche Liste von4
s zurückgeben. Die Funktionenp
nehmen die erstenn
Elemente aus dieser Liste, entfernen Duplikate und sortieren die Liste. Voilà.quelle
CJam - 36
Probieren Sie es online aus
Oder andere Methode:
Ich schrieb sie vor fast 2 Tagen, blieb mit 36 stecken, wurde frustriert und schlief ein, ohne etwas zu posten.
quelle