servus!
deine algorithmen sind sehr ineffizient, da du einen viel zu großen bereich überprüfst. von vornherein könntest du gerade zahlen auslassen, weil es sich bei denen (mit ausnahme der 2) niemals um eine primzahl handeln wird. (du kannst also in der schleife in zweier-schritten zählen)
negative zahlen kannst du ebenfalls weglassen und der maximal mögliche teiler ist maximal die wurzel aus deiner gesuchten zahl, also kannst du alle zahlen darüber von einer überprüfung ausschließen.
hier ist eine kurz zusammen gepfuschte lösung (die hoffentlich keinen fehler enthält):
public class Primes {
public static boolean isPrime(final long num) {
if (num < 2) {
return false;
} else if (num == 2) {
return true;
} else if ((num & 1) == 0) {
return false;
}
for (long i = 3; i*i <= num; i += 2) {
if((num % i) == 0) {
return false;
}
}
return true;
}
public static void main(String[] args) {
for (long i = -2; i <= 20; ++i) {
System.out.printf(
"#%d: %b\n", i, isPrime(i)
);
}
}
}
das liefert für die zahlen von -2 bis +20 diese ausgabe:
#-2: false
#-1: false
#0: false
#1: false
#2: true
#3: true
#4: false
#5: true
#6: false
#7: true
#8: false
#9: false
#10: false
#11: true
#12: false
#13: true
#14: false
#15: false
#16: false
#17: true
#18: false
#19: true
#20: false
zum schluss muss ich aber sagen, dass java in der BigInteger-klasse einen mordsmäßig effizienten algorithmus implementiert hat, der dir blitzschnell und sehr sehr zuverlässig mitteilt, ob eine zahl prim ist, oder nicht:
import java.math.BigInteger;
public class Main {
public static boolean isPrime(final long num) {
return BigInteger.valueOf(num).isProbablePrime(1);
}
public static void main(String[] args) {
for (long i = -2; i <= 20; ++i) {
System.out.printf(
"#%d: %b\n", i, isPrime(i)
);
}
}
}
die isProbablePrime()-methode ist zwar nicht perfekt akkurat, aber für kleinere zahlen im long-bereich stimmen die ergebnisse zu 100%.