N
Nik87
Gast
Hallo,
wir sollen ein Javaprogramm schreibe, daß zu einer Eingabezahl die Primfaktorenzerlegung ausgibt. Dabei sollen beliebig große Zahlen auf der Konsole eingegeben werden können (d.h. es ist die Klasse BigInteger zu verwenden). Die Zahlen sollen mit println ausgegeben werden. Als Test der Korrektheit sollen 400000000000000000001 und 900000000000000000001 zerlegt werden.
Na ja, ich hab mir das so gedacht: ich teste alle Zahlen von 2 bis x, ob sie Teiler der Zahl sind. Das ist der Fall, wenn die Division den Rest 0 ergibt (das ist hier die remainder-Funktion). Hier mein bisheriges Programm (das soll nicht ganz richtig sein):
Mittlerweile hab ich mir sagen lassen, dass man nur bis zur Wurzel gehen braucht, aber wie berechnet man die Wurzel bei BigIntegern? Also muß ich vorerst ein festes x nehmen.
Wir sollen das Proggie auch effizient schreiben ,die ganze Sache ist aber ziemlich langsam, die erste Testzahl geht ja noch irgendwie, bei der zweiten dauerts schon.
Wie würdet ihr die Sache aufziehen oder was könnte ich ändern?
wir sollen ein Javaprogramm schreibe, daß zu einer Eingabezahl die Primfaktorenzerlegung ausgibt. Dabei sollen beliebig große Zahlen auf der Konsole eingegeben werden können (d.h. es ist die Klasse BigInteger zu verwenden). Die Zahlen sollen mit println ausgegeben werden. Als Test der Korrektheit sollen 400000000000000000001 und 900000000000000000001 zerlegt werden.
Na ja, ich hab mir das so gedacht: ich teste alle Zahlen von 2 bis x, ob sie Teiler der Zahl sind. Das ist der Fall, wenn die Division den Rest 0 ergibt (das ist hier die remainder-Funktion). Hier mein bisheriges Programm (das soll nicht ganz richtig sein):
Code:
import java.math.*;
public class Faktor
{
public static String Zerlegung(BigInteger N)
{
if (N.compareTo(BigInteger.valueOf(1)) == 0) return "1";
String Resultat = "";
BigInteger Fak = new BigInteger("1");
BigInteger Null = BigInteger.valueOf(0);
for (int i = 2; i <= 10000000; i++)
{
Fak = BigInteger.valueOf(i);
if (N.remainder(Fak).compareTo(Null) == 0)
{
Resultat = Resultat + Fak.toString() + " * ";
}
}
return Resultat;
}
public static void main(String[] args)
{
System.out.println(Zerlegung(new BigInteger(args[0])));
}
}
Mittlerweile hab ich mir sagen lassen, dass man nur bis zur Wurzel gehen braucht, aber wie berechnet man die Wurzel bei BigIntegern? Also muß ich vorerst ein festes x nehmen.
Wir sollen das Proggie auch effizient schreiben ,die ganze Sache ist aber ziemlich langsam, die erste Testzahl geht ja noch irgendwie, bei der zweiten dauerts schon.
Wie würdet ihr die Sache aufziehen oder was könnte ich ändern?