Primzahltest-Problem

  • Themenstarter Themenstarter JavaGhost
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
J

JavaGhost

Gast
Hallo! Wie kann ich in diesen Primzahltest reinbringen, dass wenn ich das Programm nach einer Zahl frage, z.B. x, dass das Prog dann ne Rechnung anstellt und mir sagt, ob x prim ist oder nciht?
Hier der Test:
Vielen Dank im Voraus.

Code:
*/
public class pzt {

    public static boolean isPrime(int number) {

        if (number < 2) {
            return false;
        } else if (number == 2) {
            return true;
        } else {


            if (number % 2 == 0) {
                return false;
            }

        
            for (int i = 3; i <= Math.sqrt(number); i = i + 2) {

                if (number % i == 0) {
                    return false;
                }
            }
            return true;
        }
    }

    public static void main(String[] arguments) {

        for (int z = 1; z <= 100; z++) {

            if (isPrime(z)) {
                System.out.println(z + " is prime.");
            }
        }
    }
}
 
Code:
public class pzt {

    public static boolean isPrime(int number) {

        if (number < 2 || number%2 == 0) 
        {
            return false;
        }

        for (int i = 3; i <= Math.sqrt(number); i = i + 2) 
        {
        	if (number % i == 0) 
        	{
        		return false;
            }
        }
            
        return true;
    }

    public static void main(String[] arguments) {

        for (int z = 1; z <= 100; z++) {

            if (isPrime(z)) {
                System.out.println(z + " is prime.");
            }
        }
    }
}
 
War nicht eingeloggt und hab die 2 vergessen:

Code:
public class pzt {

    public static boolean isPrime(int number) {

        if (number < 2 || number%2 == 0) 
        {
            return false;
        }
        else if(number == 2)
        {
        	return true;
        }

        for (int i = 3; i <= Math.sqrt(number); i = i + 2) 
        {
        	if (number % i == 0) 
        	{
        		return false;
            }
        }
            
        return true;
    }

    public static void main(String[] arguments) {

        for (int z = 1; z <= 100; z++) {

            if (isPrime(z)) {
                System.out.println(z + " is prime.");
            }
        }
    }
}
 
?? das ist deine ganze Klasse einfach die alte pzt überschreiben

mom, ich setzt noch schnell codetags
 
War noch ein Fehler drin:

Code:
public class pzt {

    public static boolean isPrime(int number) {


        if(number == 2)
        {
        	return true;
        }
    	
        if (number < 2 || number%2 == 0) 
        {
            return false;
        }

        for (int i = 3; i <= Math.sqrt(number); i = i + 2) 
        {
        	if (number % i == 0) 
        	{
        		return false;
            }
        }
            
        return true;
    }

    public static void main(String[] arguments) {

        for (int z = 0; z <= 100; z++) {

            if (isPrime(z)) {
                System.out.println(z + " is prime.");
            }
        }
    }
}
 
Ach Mensch, irgendwie geht das nicht. Ich bekomm dann immer nur gesagt: (beim Linux Terminal)

"sbeppel@jbone:~> isPrime(7);
bash: syntax error near unexpected token `7'"

Muss ich vorher noch was eingeben?
 
Wo muss ich das denn dann noch einfuegen? Bitte, ich brauch die Hilfe jetzt wirklich ganz dringend.. das mit der Insel hab ich mir auch schon mal durchgelesen.. nur einmal, bitte!
 
Code:
public static void main(String[] arg) {
int i = 0;

if(arg.lenght > 0){
i = Integer.parseInt(arg[0]);
}
else{
System.out.println("Shit happens");
}

if(isPrime(z)) 
 System.out.println(z + " is prime.");
}
else{
System.out.println(z + " is NOT prime.");    
}

Ich bin mal so lieb

EDIT:

da is noch en Fehler:

length schreibt man so
 
Wozu ist das "shit happens" da?! Kannst du mir nochmal den kompletten Code geben, ich versprech dir dann auch, dass ich das dann alles alleine kann 🙂
 
du rufst das Programm via Konsole auf zB

java pzt 7

die sieben wird eingelesen und befindet sich an der Stelle arg[0]

wenn
java ptz

dann hats keine Argumente...also arg.length == 0
somit haste keine Zahl zu rechenen...Shit happens...
 
Kannst du mir einmal den ganzen Code geben, bitte? Also alles zusammen, so bekomm cih das nicht hin. Danke.
 
Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaargh.................

(Soll heißen es steht schon 1 kompletter Code und eine alternative Main-Methode hier drin!!!)
 
Code:
public class Prime{

public static boolean isprime(int n) {
        if (n < 2) {
            return false;
        }
        else if (n == 2) {
            return true;
        }
        else if (n % 2 == 0) {
            return false;
        }
        else {
            for (int i=3; i*i<=n; i+=2) {
                if (n%i==0) {
                    return false;
                }
            }
            return true;
        }
}


public static void main(String[] arg) {
int i = 0;

if(arg.lenght > 0){
i = Integer.parseInt(arg[0]);
}
else{
System.out.println("Shit happens");
}

if(isPrime(z))
System.out.println(z + " is prime.");
}
else{
System.out.println(z + " is NOT prime.");   
}

}

wobei ich bezweifle das du es so hinbringst (nicht bös gemeint)

EDIT:
der Fehler hat sich durchgepastet
length schreib man immer noch so
 
Code:
public static void main(String[] arg) {
int i = 0;

if(arg.lenght > 0){
i = Integer.parseInt(arg[0]);
}
else{
System.out.println("x");
}

if(isPrime(z))
System.out.println(z + " is prime.");
}
else{
System.out.println(z + " is NOT prime.");   
}

wenn ich den kompilieren versuche, sagt er mir dass 1 error drin ist. wie mach ich den weg?
 
Der Fehler ist behoben, jetzt bekomme ich folgendes:

pzt3.java:1: 'class' or 'interface' expected
public static void main(String[] arg) {
^
1 error
 
Hast du die Datei "Prime.java" genannt?

lies dir mal ein paar Grundlagensachen durch, das hilft dir auch für die Schule/Uni weiter...
 
Ja, das stimmt soweit. Habe aber immer noch 2 Fehler mit dem Prime-Code von da oben drin...

pzt3.java:37: illegal start of type
else{
^
pzt3.java:40: <identifier> expected
^
2 errors
 
"Geh nach Hause lies ein Buch"

Nix gegen Anfänger, aber so ein paar Grundlagen sollte man sich doch schon selbst über Bücher und Tutorials aneignen.

Javaghost, du hast ja nicht mal eine Ahnung davon, was Klassen oder Methoden sind und wie man kompiliert.....

Wenn du das Programm gemacht haben willst schick mir deine E-Mail-Adresse, dann send ich dir die java-Dateien (das Programm ist ja jetzt eh schon fertig)

Ich helf normalerweise echt gerne, wenn ich kann, aber bei 0 Eigeninitiative kommt man sich schon leicht verars...t vor.
 
@Der Müde Joe

Dein Code war wirklich voller fehler:
2 Klammern nicht geschlossen
Groß&Kleinschreibung nicht beachtet
Variable i genannt, aber z aufgerufen...


So gehts:
Code:
public class Prime{

public static boolean isPrime(int n) 
{
	if (n < 2) 
	{
            	return false;
        	}
        	else if (n == 2) 
	{
            	return true;
        	}
        	else if (n % 2 == 0) 
	{
            	return false;
        	}	
        	else 
	{
	            for (int i=3; i*i<=n; i+=2) 
		{
            		if (n%i==0) {
            	        	return false;
                	}
            }
            return true;
        }
}


public static void main(String[] arg) 
{
	int z = 0;

	if(arg.length > 0)
	{
		z = Integer.parseInt(arg[0]);
	}
	else
	{
		System.out.println("Shit happens");
	}

	if(isPrime(z))
	{
		System.out.println(z + " is prime.");
	}
	else
	{
		System.out.println(z + " is NOT prime.");   
	}

}
}
 
wobei zu erwaehnen ist dass dieser algo sehr ineffizent ist.

die for schleife macht unnoetige vergleiche...
i = 3 ist sagen wir false, ergo braucht man nicht mehr 9,15,27, usw testen....

aber so fuern anfang ist das schon in ordnung
 
deathbyaclown hat gesagt.:
wobei zu erwaehnen ist dass dieser algo sehr ineffizent ist.

die for schleife macht unnoetige vergleiche...
i = 3 ist sagen wir false, ergo braucht man nicht mehr 9,15,27, usw testen....

aber so fuern anfang ist das schon in ordnung

??

Der Code bricht ab, wenn er ein false auswirft, der macht dann nicht noch weiter.


Beispiel für die 10 check 3 (10%3!=0) check 5(10%5=0) -> bricht die Methode ab und wirft ein false aus.

So schlecht ist der Algo nicht
 
Ariol hat gesagt.:
deathbyaclown hat gesagt.:
wobei zu erwaehnen ist dass dieser algo sehr ineffizent ist.

die for schleife macht unnoetige vergleiche...
i = 3 ist sagen wir false, ergo braucht man nicht mehr 9,15,27, usw testen....

aber so fuern anfang ist das schon in ordnung

??

Der Code bricht ab, wenn er ein false auswirft, der macht dann nicht noch weiter.


Beispiel für die 10 check 3 (10%3!=0) check 5(10%5=0) -> bricht die Methode ab und wirft ein false aus.

So schlecht ist der Algo nicht
dein beispiel trifft nicht meinen kritikpunkt.
sagen wir er test 10293471 ob es einen primzahl ist.
dann faengt der algorithmus an auf 3 zu testen, sagen wir es ist false, er checkt ob auf 5, dann auf 7.
bis dahin alles ok.
nun kommt 9 und das testet er auch. da er aber schon 3 getestet hat ist es logisch, dass die zahl nicht durch 9 teilbar sein kann, genauso wie durch 15. also ist dieser test dann auch unsinnig, der algorithmus macht ihn aber, da er einfach immer +2 testet und nicht vorhandenes wissen einsetzt.


der perfekte algorithmus waere, wenn man einfach alle primzahlen bisdahin durchlaueft und die testet... da man aber das nicht kann muss man einen workaround machen. dieser algorithmus ist einer, aber nicht unbedingt der beste !
 
axo, ja ok

dafür gibts ja ansätze, aber ich vermute mal, dass hier eher der umgang mit modulo und schleifen sowie logischem denken getesetet werden sollte.
Es gibt ja noch schlechtere Algorithmen (%4,%6,%7....) Da ist der Ansatz doch schon ganz gut.


Am besten gehts natürlich mit einer Liste, in die man alle schon gefundenen Primzahlen reinlegt und jede Zahl mit den Werten aus dieser Liste vergleicht, solange diese Werte nicht Wurzel(Zahl) übersteigt - Schneller gehts kaum 😉

Aber halt nur wenn man alle Primzahlen zwichen 0 und x herausfinden will, sonst braucht man auch einen anderen ansatz
 
Wie kann ich in den Algo noch einfuegen, dass wenn ich ihn nach 10 frage, dass er dann sagt: NOT prime, 2x2x2x2x2 oder so. Waer echt nett, so praktisch als Primfaktorzerlegung. Danke
 
javaghost hat gesagt.:
Wie kann ich in den Algo noch einfuegen, dass wenn ich ihn nach 10 frage, dass er dann sagt: NOT prime, 2x2x2x2x2 oder so. Waer echt nett, so praktisch als Primfaktorzerlegung. Danke
schoen zu wissen, wenn man nach laengeren nicht mehr da war, die fragen und die bitten nach komplettloesung, ohne beachtung von wunderprogrammen wie google oder sonstiges, sich nicht geandert haben. (mhm gibt immer noch kein ironie tag *g)

aber gell, wenn man dir den code hinwirft weisst du auch sofort was und warum....
 
deathbyaclown hat gesagt.:
der perfekte algorithmus waere, wenn man einfach alle primzahlen bisdahin durchlaueft und die testet...

Gesagt, getan:

Code:
	boolean isPrim(int n) {
		if (n<2)
			return false;
		for (int i : primsBisN(n-1))
			if (n%i == 0)
				return false;
		return true;
	}

	List<Integer> primsBisN(int n) {
		List<Integer> prims = new ArrayList<Integer>();
		for (int i=2; i < n; ++i)
			if (isPrim(i))
				prims.add(i);
		return prims;
	}

Braucht zum Testen ob 41 prim ist nur 29,175 Sekunden bei
lediglich 102.334.155 Aufrufen der Methode isPrim!

( 😎 )
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben