Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hi Community !
Ich möchte Primzahlenpärchen ausgeben. Vorerst aber natürlich erstmal den normalen Algo um eine Primzahl zu berechnen. Habe ihn nun so ungesetzt. Die Ausgabe Primzahl/Keine Primzahl passt aber nicht.. wo ist mein Fehler ?
Java:
import AlgoTools.IO;
class primzahl {
public static void main(String arguments[])
{
int obereschranke,untereschranke,div,erg,i;
boolean prim;
System.out.println("////////////////////////////Primzahl - F.K/////////////////////");
untereschranke = IO.readInt("Bitte geben Sie die untere Schranke ein:");
obereschranke = IO.readInt("Bitte geben Sie die obere Schranke ein:");
prim=true;
for(i=untereschranke;i<=obereschranke;i++)
{
div=2;
while((i-1)>=div)
{
erg=i%div;
if (erg==0)
{
System.out.println(i+"Keine Primzahl");
prim=false;
break;
}
div++;
}
if (prim==true)
System.out.println(i+ "Primzahl");
}
}
}
}
Dein prim = true muss in die for schleife rein.
Ansonsten wird immer davon ausgegangen (nachdem einmal eine nicht-primzahl gefunden wurde) das die Primzahl keine solche ist und die Bedingung if(prim == true) wird nie erfüllt.
Edit: zudem würde ich behaupten deine while könnte auch
while (i/2 >= div)
heißen, müsste genauso gut als Test funktionieren, weil eine zahl die größer als i/2 ist ja kein teiler von i sein kann.
Hi Purgator !
Danke für den Hinweis. Habe mich schon dumm und dusselig gesucht wo denn der Fehler ist.
Ich mach mich jetzt daran herauszufinden wie man die Primzwillinge anzeigt. 5 und 7
3 und 5
differenz = 2
Ich darf nicht mit Arrays und dem Sieb von E arbeiten.
Habe mir überlegt die erste primzahl in variable 1 zu schreiben und die 2. in variable 2
dann variable 2 -variable1 =2 ?
Wenn du solche Vorgaben hast, heißt es so gut wie: du kannst die Ergebnisse nicht speichern.
Vorschlag wäre:
Du hast min...max Bereich. Dann suchst du in diesem Bereich eine Primzahl x und überprüfst ob x+2 eine Primzahl ist, wenn ja, dann gibst du das Paar aus. Dannach suchst du die nächste Primzahl.
Prinzipiell wäre ich auch so vorgegangen.
Allerdings brauchst du glaube ich nur eine neue Variable - die derzeitige hast du ja bereits in i zu stehen.
Wenn dann die Bedingung if(prim == true) erfüllt ist, könntest du dann testen ob (i-lastPrim) == 2 ist
(wenn ja den zwilling ausgeben) und danach lastPrim = i setzen.
Alternativ könntest du auch einfach nur einen boolean nutzen.
Wenn du nämlich anstatt jede zahl immer nur jede 2. testen würdest (nämlich jede ungerade, da ausser 2 jede gerade zahl eine primzahl ist - aber selbst bei 2 kommt es ja auf die Definition von Primzahlen an) würde der boolean halt angeben ob die zuletzt getestete Zahl eine Primzahl war. Wenn nun die aktuelle Zahl eine Primzahl ist würdest du das überprüfen und so weiter... also fast genauso wie oben vorgehen.
Bei dieser Variante müsstest du wegen den 2er Schritten halt noch ein wenig mehr am code anpassen (der dafür, zumindest in der theorie, schneller werden würde, da er etliche nicht-Primzahlen erst garnicht testet).
Ansonsten fällt mir spontan auch keine einfach andere Methode ein muss ich zugeben.
Wenn du nämlich anstatt jede zahl immer nur jede 2. testen würdest (nämlich jede ungerade, da ausser 2 jede gerade zahl eine primzahl ist - aber selbst bei 2 kommt es ja auf die Definition von Primzahlen an)
Arg sry.
War kein Tipp-, sondern ein Denkfehler.
Habe das mit der 1 vertauscht (gibt ja die Definition "Jede Zahl die nur durch 1 UND sich selbst teilbar ist" und da wurde von einigen Leuten aus meiner uni gemeint das es nicht auf 1 zutreffe... aber Mathe war ich nie gut).
Aber stimmt, 2 dürfte egal wie man es dreht und wendet, eine Primzahl sein
Habe das mit der 1 vertauscht (gibt ja die Definition "Jede Zahl die nur durch 1 UND sich selbst teilbar ist" und da wurde von einigen Leuten aus meiner uni gemeint das es nicht auf 1 zutreffe... aber Mathe war ich nie gut).
Das Thema habe ich schon mal gesehen... aber 1 ist keine Primzahl. Die lässt sich zwar nur durch 1 und sich selber teilen, aber dennoch würden einige Sachen nicht mehr stimmen, wenn man die 1 als Primzahl zulässt. z.B. die Aussage "Primfaktorzerlegung ist eindeutig" würde schon mal nicht klappen, da 6=2*3=2*3*1*1=2*3*1*1*1*1*1 ist. Auf diesem Theorem bauen dann andere Sachen auf etc etc.
Prinzipiell wäre ich auch so vorgegangen.
Allerdings brauchst du glaube ich nur eine neue Variable - die derzeitige hast du ja bereits in i zu stehen.
Wenn dann die Bedingung if(prim == true) erfüllt ist, könntest du dann testen ob (i-lastPrim) == 2 ist
(wenn ja den zwilling ausgeben) und danach lastPrim = i setzen.
Muss lastprim nicht nach dem Schleifendurchlauf zuerst = i gesetzt werden da lastprim beim ersten vergleich ja noch nicht initialisiert wurde ?
Also wenn i = Primzahl dann
Lastprim = i
ich weis noch nicht ganz genau wo ich es einbauen soll...
Kann mir wer helfen ?