Seite 1 von 2

Bug in NextPrimeNumber in Übung11

Verfasst: 4. Jul 2007 09:41
von HerrDerFlammen
Dem erstellenden Autor ist wohl leider ein kleiner Fehler passiert. Für Eingaben <3 gibt diese Methode als nächste Primzahl 2 zurück, was bekanntlicherweise Unsinn ist ;-)

Verfasst: 4. Jul 2007 10:04
von Wang Tang
hab die übung grad nicht vor mir, aber das scheint doch zu stimmen?

Verfasst: 4. Jul 2007 10:34
von banshee
Für die Eingabe 2 jedenfalls nicht :>

Verfasst: 4. Jul 2007 13:42
von HolgerF
? Stimmt doch. 2 ist die erste Primzahl. Der Algorithmus soll ab einer gegebenen Unterschranke s die nächste Primzahl berechnen. Für s=2 ist die nächste Primzahl eben s selbst.

Verfasst: 4. Jul 2007 14:08
von banshee
aso, ich hab gedacht s is dabei dann ausgeschlossen.

Verfasst: 4. Jul 2007 14:35
von HolgerF
Naja, es ist zugegeben ein bisschen missverständlich. Aber ich geh da immer von der mathematischen Sichtweise aus, und da würde im anderen Fall explizit stehen "die nächste Primzahl, die größer als s ist".

Zweiter Hinweis: Man braucht das im Praktikum 9, und da explizit in der Funktion, dass die Primzahl gleich s sein kann.

Verfasst: 4. Jul 2007 15:30
von HerrDerFlammen
HolgerF hat geschrieben: Zweiter Hinweis: Man braucht das im Praktikum 9, und da explizit in der Funktion, dass die Primzahl gleich s sein kann.
Würde ich so nicht sagen. Besipielsweise ist
deine Tabellengroesse zu beginn 2 und dein extensionfaktor zu beginn 1.
Du fügst das erste element ein und es ändert sich nix. Du fügst nun das zweite ein und musst deine tabelle vergrößern. Also aktuelle Größe mal extensionfaktor ist wieder 2. Jetzt berechnest du die nächste Primzahl, und wenn du die Schranke s mit reinnimmst kommt dann also für 2 wieder 2 raus, bedeutet die Tabelle vergrößert sich garnicht. Ist doch nicht besonders gut oder?
Ab einer unteren Schranke heißt für mich jedenfalls, dass die Schranke nicht dazu gehört.

Verfasst: 4. Jul 2007 16:25
von Christoph B
if(extensionfaktor <= 1) throw new IllegalArgumentException("sag mal, willst du mich verarschen?");

Verfasst: 4. Jul 2007 17:25
von HolgerF
@HerrDerFlammen: Da hat Christoph recht, ein Expansionsfaktor von 1 ist einfach schlicht... dämlich? Du kannst aber im Prinzip auch einfach das Produkt + 1 deinem Primzahlfinder übergeben. Da das Produkt logischerweise selbst keine Primzahl sein kann AUSSER in diesem Spezialfall, schadet das nicht.

Verfasst: 4. Jul 2007 18:38
von HerrDerFlammen
Ich finds sehr interessant, auf was für nem vulgärniveau die diskussion angekommen ist.
Ob ein extensionFactor von 1 nun sinnig oder nicht ist, er ist jedenfalls laut aufgabenstellung nicht verboten.

Kleiner Auszug:

* If your hashtable has to grow, multiply the size of your hashtable
* with extensionFactor. Then use the next prime greater than that product.

Das klappt doch wie schon gesagt auch mit einem extensionFactor von 1.
Vielleicht sollte sich mal jemand offizielles dazu äußern, bevor es jetzt gleich Beschimpfungen regnet.

Verfasst: 4. Jul 2007 18:41
von HolgerF
Dann gib doch, wie gesagt, einfach das Produkt + 1 an deine Suchfunktion (Produkte selbst sind ja ohnehin nie prim, es sei denn halt, der eine Multiplikand ist 1).
Bei der Initialgröße sollst du z. B. hingegen wieder von der Initialgröße selbst ausgehen, eine Initialgröße von 2 ist ausdrücklich zulässig.

Du kannst also natürlich auch gerne eine Funktion schreiben, die die nächste GRÖSSERE Primzahl sucht. Dann musst du halt initial-1 übergeben, läuft aufs selbe hinaus. Fürs Praktikum ist das einerlei.

Verfasst: 5. Jul 2007 15:03
von Hyst
seh ich ähnlich...

tja solche missverständnisse treten eben auf wenn (mal wieder) die aufgabenstellung schlecht formuliert wurde.

ich hab es auch so interpretiert, dass extentionfaktor <= 1 keinen sinn macht... in der aufgabenstellung steht:
..., soll sich Ihre Hashtabelle um einen (im Konstruktor) gegebenen Faktor X dynamisch vergößern. Da nur Primzahlenzahlen als Tabellengröße erlaubt sind, mussen Sie
die nächst höhere Primzahl finden.
mir sagt das, dass mein faktor > 1 sein muss, da sonst meine berechnung zur nächsten unteren schranke wieder eine primzahl liefert. und das wäre ja dann ein erlaubter wert. Außerdem soll sich die Hashtabelle um einen faktor VERGRÖßERN.. das tut sie mit 1 nicht.

(kann es sein, dass herr wach keine lust mehr hat irgendwelche fragen zu praktika oder übungen zu beantworten???... hab irgendwie lange nichts mehr von ihm gelesen)

Verfasst: 5. Jul 2007 17:15
von qveXx
Hyst hat geschrieben:seh ich ähnlich...

tja solche missverständnisse treten eben auf wenn (mal wieder) die aufgabenstellung schlecht formuliert wurde.
Aufgabenstellung hat geschrieben: Da nur Primzahlen als Tabellengröße erlaubt sind, müssen Sie die nächst höhere Primzahl finden
Eingabe 7, Extensionfaktor 1 -> nächst höhere Primzahl = 11

wobei man schon diskutieren kann ob 1 dazu gehöhrt oder nicht, aber zumindestens dass mit der nächsten Primzahl sollte klar sein, dass wenn man eine Primzahl als Eingabe hat, nicht die gleiche Primzahl zurückgegeben wird sonder halt die nächst größere

Sollte es anders sein, dann müsst ich noch nen Patch in mein Prak einspielen ;>

Edit:
Habe grad im Quellcode Kommentar gesehen: "* If initialSize is not prime, use the next prime greater than initialSize to
* initialize your hash table." was wiederrum heißen würde nicht nach der nächsten zu suchen. Ich würde sagen
(aufgabenstellung.pdf).compareTo(aufgabenstellungQuellcode)!=0 ^^

Verfasst: 5. Jul 2007 17:21
von Hyst
soll sich Ihre Hashtabelle um einen (im Konstruktor) gegebenen Faktor X dynamisch vergößern
X=1 vergrößert die liste nicht...
der zusatz: Es sind nur primzahlen erlaubt tritt ja erst als kriterium NACH der vergrößerung in kraft.

wie gesagt: nicht unmissverständlich formuliert.

Verfasst: 5. Jul 2007 17:22
von Christoph B
joa, aber auch nur für Zahlen die nich schon prim sind würd ich sagen ;)
und 7 * 1 = prim, wieso dann weiter prim suchen?
edit da war jemand schneller

falls sich das vulgäre auf meinen post bezogen hat sorry ^^
hatte einfach per copy & paste meine abfrage aus dem prak gepostet