Hallo Alle zusammen,
ich komme eigentlich aus der Python Ecke, zwinge mich aber Sachen in Java zu schreiben, einfach weil die Sprache eben wichtig ist und ich sie noch nicht besonders gut kann.
Ich habe eben ein Problem mit Python gelöst und grüble jetzt darücber wie man das in Java machen könnte.
Es geht darum einen Zahlengeneratorn zu bauen.
Ein Generator in Python gibt mit jedem neuen Aufruf eine neue Zahl aus, zB:
def intGenerator():
i=0
while True:
yield i
i+=1
Dann könnte ich sowas hier machen:
gen=intGenerator()
print(next(gen))
print(next(gen))
print(next(gen))
und die Ausgabe wäre
0
1
2
Ok, Meine Frage:
Geht sowas auch in Java?
Warum ich das haben will?
Ich habe eine Funktion zur Primfaktorisierung geschrieben. Dabei soll eine Zahl einfach der Reihe nach durch Primzahlen geteilt werden, also erstmal wird die Zahl durch die 2 geteilt, dann nochmal… und wenn mit 2 keine restfreie Division mehr möglich ist wird die 3 probiert usw.
Dazu habe ich bei einer früheren Implementierung eine Liste von Primzahlen erstellen lassen, die kleiner sind als die betrachtete Zahl, das hat mintunter extrem lange gedauert!
Oft sind aber garkeine großen Primzahlen nötig, zB:
118918800=2^4\cdot 3^3\cdot 5^2\cdot 7\cdot 11^2\cdot 13
Daher wird jetzt immer erst dann eine neue Primzahl erzeugt, wenn eine gebraucht wird, weil keine restlose Division mehr möglich ist.
Ich weiß nicht obs euch hilft, aber in Python sieht das dann so aus:
def __primGenerator(n):
yield 2
for i in range(3,n+1,2):
for j in range(3,i//2,2):
if i%j==0:
break
else:
yield i
def primFaktorisierung(n):
teiler=[]
gen=__primGenerator(n)
while n!=1:
i=next(gen)
while n%i==0:
teiler.append(i)
n/=i
return teiler
Ich hoffe ihr seht warum ich die Verwendung des Generators so gern beibehalten möchte…
Gibt es eetwas ähnliche in Java oder eine andere schöne Möglichkeit diesen Ansatz zu verfolgen?
LG
elactic