Primzahlen berechnen in Java?

5 Antworten

include

using namespace std;

int main() { bool bPrime; long lngFrom; long lngTo;

cout << "Von: "; cin >> lngFrom; cout << "Bis: "; cin >> lngTo;

for (int a = lngFrom; a <= lngTo; a++) { bPrime = true; for (int b = 2; b < a; b+=2 /b++/) { if (a % b == 0) { bPrime = false; break; } } if (bPrime) cout << "Die Zahl: " << a << "\tist eine Primzahl!\n"; } cin.get(); return 0; }

versuchs mal in etwa so:

import java.lang.Math;

public class prime {

public static void main (String[] args) {
      int Zahl = 12;
      int r = (int) Math.ceil(Math.sqrt((double)Zahl));
      boolean isprime = true;
      if (Zahl % 2 ==0) {
          System.out.println(Zahl + " ist keine Primzahl, sie ist durch 2 teilbar.");
          isprime = false;
      }
      for(int i = 3; i < r; i=i+2) {
       if (Zahl %i == 0) {
        isprime = false;
        System.out.println(Zahl + " ist keine Primzahl, sie ist durch " + i + " teilbar.");
        break;
       }
      }
      if (isprime) {
          System.out.println(Zahl + " ist eine Primzahl");
        }
     }
}

das ist extrem ineffizient.

  1. du brauchst nur die teiler bis Wurzel(zahl) prüfen.
  2. wenn du die 2 gesondert betrachtest, reicht es, nur ungerade teiler zu prüfen.
  3. rechne modulo, dann kannst du auf den integern bleiben, also, if (zahl % i ==0), dann teilt i die zahl

man kann weiter optimieren, aber das ist ein anfang :)

Java rundet grundsätzlich auf Integer, wenn nur Integerzahlen auf der rechten Seite vorkommen. d.h. bei

d1 = Zahl / i;

wird gerundet. Baust du einen cast ein, funktioniert es wie gedacht:

d1 = (double) Zahl / i;

Hab gerade zwar kein Java zur Hand aber ich denke in der Zeile d1 = Zahl/i; müsste es d1 = (double)Zahl/i; heißen.

Desweiteren solltest du dich mal in das Thema Modulo einlesen, dieser Operator könnte dir hier wahrscheinlich behilflich sein, denn er kann leicht dazu genutzt werden, um zu überprüfen, ob man eine Zahl restlos teilen kann bzw. welcher Rest übrig bleibt.

Woher ich das weiß:Berufserfahrung – Softwareentwickler/Projektleiter seit 2012