primzahlen im array

ringelking96

Mitglied
moin, ich möchte gerne ein programm schreiben, welches mir die ersten 10 primzahlen in einem array ausgibt und brauche da etwas hilfe. also ich habe bis jetzt es geschafft, mithilfe zweier for-schleifen zu ermitteln, welche zahlen nur 2 teiler haben, jedoch kriege ich sie nicht in meinenen array gespeichert, sondern gebe sie nur einfach so ohne den array aus. ebenfalls musste ich die maximale zahl auf 30 setzen, um nicht über 10 zahlen auszugeben, da wusste ich auch wie ich es mache, dass er nur 10 nimmt. mein coe is bis jetzt so:
Java:
public class Primzahlen {

    public static void main(String[] args) {

        int[] Primzahlen;
      
        Primzahlen = new int[10];
        for(int i=1; i<=30; i++)
        {
            int teilbar = 0;
            for(int j=1; j<=i; j++)
            {
                if (i % j == 0)
                {
                    teilbar++;
                }
              
            }
          
            if(teilbar == 2)
            {
                System.out.print(i + " ");
            }
          
          
        }
    }

}
hätte da gerne tipps wie ich es mit array schaffe wie gesagt.
danke
 
Zuletzt bearbeitet von einem Moderator:

JStein52

Top Contributor
An der Stelle wo du die Primzahl gefunden hast und sie jetzt nur ausgibst schreibst du sie einfach in dein Array Primzahlen. Damit du weisst an welche Stelle du sie dort schreiben musst führst du einen eigenen Zähler mit den du nach jeder Primzahl die du kopiert hast um eins erhöht, so dass dass dieser Zähler immer auf die nächste freie Stelle in "Primzahlen" zeigt.
 

JStein52

Top Contributor
Und das mit der Begrenzung für i auf 30 kannst du auch noch wegkriegen wenn du halt einfach abfragst ob du schon soviele Primzahlen gefunden hast wie in das Array passen, z.B. indem du die Abbruchbedingung deiner for (int i.... ) - Schleife so formulierst dass sie endet wenn nextPrim grösser gleich der Länge des Arrays wird.
 

ringelking96

Mitglied
ok danke mein code sieht jz so aus:
Java:
public class Primzahlen {

    public static void main(String[] args) {

        int[] Primzahlen;
        int nextPrim =1;
        Primzahlen = new int[10];
        for(int i=1; nextPrim<=Primzahlen.length; i++)
        {
            int teilbar = 0;
            for(int j=1; j<=i; j++)
            {
                if (i % j == 0)
                {
                    teilbar++;
                }
              
            }
          
            if(teilbar == 2)
            {
              
                System.out.println(i + " ");
                    Primzahlen[nextPrim++] = i;
              
              
            }
          
          
        }
    }

}

dann kommt ein error wegen "exception: 10 in Primzahlen" klappt also noch nicht
 
Zuletzt bearbeitet von einem Moderator:

JStein52

Top Contributor
Bei deinem Code bleibt Primzahlen[0] leer. Arrays fangen in Java mit dem Index 0 an. Und wenn du versuchst in Primzahlen[10] zu schreiben kriegst du eine Exception
 

ringelking96

Mitglied
wenn ich nextPrim auf 0 setze ist es das gleiche, und wenn ich Primzahlen[nextPrim++] = i; auf Primzahlen[++nextPrim] = i; ändere kommt die fehlermeldung immernoch
 
X

Xyz1

Gast
Hier mal eins für die ersten 25:
Java:
        int[] array = IntStream.range(1, 100).map(o -> o % 2 == 0 ? 0 : o).toArray();
        for (int i = 2; i < array.length; i++) {
            if (array[i] != 0) {
                for (int j = i + 2; j < array.length; j += 2) {
                    if (array[j] % array[i] == 0) {
                        array[j] = 0;
                    }
                }
            }
        }
        Arrays.stream(array).filter(o -> o != 0).mapToObj(o -> o + ", ").forEach(System.out::print);

Code:
1, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97,

Sollte eigentlich flux gehen, wenn ich mich nicht irgendwo vertan hab. :D

Anmerkung: Jepp, die innere Schleife ist falsch
 
X

Xyz1

Gast
Hier nochmal richtig:
Java:
    public static void main(String[] args) {
        long t1 = System.currentTimeMillis();
        int[] array = sieb(10000000);
        long t2 = System.currentTimeMillis();
        System.out.println(Arrays.toString(array));
        System.out.println(t2 - t1);
    }

    private static int[] sieb(int end) {
        int[] array = IntStream.range(0, end).map(o -> o % 2 == 0 ? 0 : o).toArray();
        for (int i = 3; i < array.length; i += 2) {
            if (array[i] != 0) {
                for (int j = array[i] * 2; j < array.length; j += array[i]) {
                    array[j] = 0;
                }
            }
        }
        return Arrays.stream(array).filter(o -> o != 0).toArray();
    }

könntet ja mal messen.

Wieso denn Käse? Du bist gemein. :(

Anmerkung: Immernoch zu kompliziert, schreibe (spart 10 %):
Java:
        for (int i = 3; i < array.length; i += 2) {
            if (array[i] != 0) {
                for (int j = i * 2; j < array.length; j += i) {
                    array[j] = 0;
                }
            }
        }

Man man man, heute nur Mist. :(
 
Zuletzt bearbeitet von einem Moderator:

JStein52

Top Contributor
Ich will dem TE und dir ja nicht zu nahe treten, aber Käse deshalb: wenn du Probleme hast zu wissen wie die Indizes in einem int-Array sind und du nicht so genau weisst wie du die Schleifenbedingung zu formulieren ist dann stehst du halt noch ziemlich am Anfang. Und dann versteht man deinen Code da oben überhaupt nicht. Dann sollte man ihn zuerst mal seinen eigenen Code verstehen lassen und ihm nicht Lambda's an den Kopf knallen. Das mit dem Käse war keine Wertung deines Codes. Der ist sicher ganz cool. ;)
 
X

Xyz1

Gast
Teste mal, ob es mit Lambdas gegenüber normalen Arrays schneller ist:
Java:
    public static void main(String[] args) {
        long t1 = System.currentTimeMillis();
        int[] array = sieb(100000000);
        long t2 = System.currentTimeMillis();
        System.out.println(array[array.length - 1]);
        System.out.println(t2 - t1);
    }

    private static int[] sieb(int end) {
        int[] array = IntStream.range(0, end).map(o -> o % 2 == 0 ? 0 : o).toArray();
        for (int i = 3; i < array.length; i += 2) {
            if (array[i] != 0) {
                for (int j = i * 2; j < array.length; j += i) {
                    array[j] = 0;
                }
            }
        }
        return Arrays.stream(array).filter(o -> o != 0).toArray();
    }

Endlich mal ist der Speicher das Problem dabei. :D
 
X

Xyz1

Gast
Ich glaub, mit Lambdas ist das alles Verars... :D Hab mir schon fast so etwas gedacht.

Jedenfalls, es liefert die ersten N Primzahlen, wobei man vorher noch nicht sagen kann, wie viele... da müsste man auch anders ran.
 
N

neoexpert

Gast
Hab mal aus spass folgende Primzahl Berechnung geschrieben:
Java:
import java.util.*;

public class Main
{

    public static void main(String[] args)
    {
        ArrayList<Integer> p=new ArrayList<Integer>();
        int i=1;
      
        while (true)
        {
            i++;
            boolean prim=true;
            int sqrti=(int)Math.sqrt(i)+1;
            for (Integer n:p)
            {
                if(n>sqrti)
                    break;
                if (i % n == 0)
                {
                    prim = false;
                    break;
                }
            }
            if (prim)
            {
                p.add(i);
                System.out.println(i);
              
            }

        }
    }
}
 
X

Xyz1

Gast
Geht auch, wäre der umgekehrte Ansatz, Math.sqrt() ist ein guter Punkt ;)

Bearbeitung: Nochmal etwas in geändert, sollte man so nicht machen, nur für Profis:
Java:
    private static int[] sieb(int end) {
        ArrayList<Integer> p = new ArrayList<>();
        a:
        for (int i = 3; i < end; i += 2) {
            int sqrt = (int) Math.sqrt(i) + 1;
            for (Integer integer : p) {
                if (integer > sqrt) {
                    break;
                }
                if (i % integer == 0) {
                    continue a;
                }
            }
            p.add(i);
        }
        return p.stream().mapToInt(e -> e).toArray();
    }
 
Zuletzt bearbeitet von einem Moderator:
N

neoexpert

Gast
Ich möchte demnächst RSA Algorithmus in Java machen. Da braucht man Riesiege Primzahlen. Wie bekommt man Primzahlen die mehrere hundert stellen haben?
 
N

neoexpert

Gast
Wir haben (ich zumindest) durch diese sehr viel gelernt. Ich mag diesen Forum deshalb sehr.
 
X

Xyz1

Gast
Mist, kann das nicht mehr bearbeiten, sieb(int end) ist eigentlich nicht für Öffentlichkeit gedacht. :D
Und zur anderen Frage, meine mathematischen Skillz sind für die Beantwortung dieser Frage nicht ausreichend. :)
 
N

neoexpert

Gast
Java:
import java.util.*;
import java.math.*;

public class Main
{

    public static void main(String[] args)
    {
        ArrayList<BigDecimal> p=new ArrayList<BigDecimal>();
        BigDecimal i=new BigDecimal(1);
        //Scanner sn=new Scanner(System.in);
        while (true)
        {
            i=i.add(new BigDecimal(1));
            boolean prim=true;
            //int sqrti=(int)Math.sqrt(i)+1;
            for (BigDecimal n:p)
            {
                //if(n>sqrti)
                    //break;
                if (i.remainder(n).equals( new BigDecimal(0)))
                {
                    prim = false;
                    break;
                }
            }
            if (prim)
            {
                p.add(i);
                System.out.println(i);
                //sn.nextLine();
               
            }

        }
    }
}
Ist allerdings überflüssig, da dieser Algorithmus ab gewisser Anzahl von Primzahlen ziemlich langsam wird.
Vllt nimmt man ein grosses BigDecimal und sucht die nächsthöhere Primzahl...
 
X

Xyz1

Gast
Mir ist noch aufgefallen, dass die Zeile so muss:
Java:
int sqrt = (int) Math.sqrt(i) ;

(+ 1 überflüssig)
Und hier sind die Primzahlen von 0 bis 10 000 000:
Anzahl 664 579, formatiert, passt gerade so in 1mb. :(

Zum testen hatte ich die ersten 1 000 000 Primzahlen aus dem Internet, da stimmte alles
 

Anhänge

  • ausg.zip
    1 MB · Aufrufe: 4
Ähnliche Java Themen
  Titel Forum Antworten Datum
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
S Primzahlen in Array ausgeben Java Basics - Anfänger-Themen 14
M Array auf Primzahlen prüfen Java Basics - Anfänger-Themen 7
L Primzahlen im Array ausgeben Java Basics - Anfänger-Themen 3
B Primzahlen mit Array errechnen! Java Basics - Anfänger-Themen 13
sserio Wieso werden nicht alle Primzahlen bis 1000 in meine Liste gepackt ? Java Basics - Anfänger-Themen 8
B Primzahlen bis 100 addieren Java Basics - Anfänger-Themen 16
H Primzahlen finden - Zeit optimieren Java Basics - Anfänger-Themen 34
D Primzahlen Rechner nach Eratostenes von Kyrene Algorithmus Java Basics - Anfänger-Themen 2
fendix Compiler-Fehler Algorithmus zur Bestimmung von Primzahlen Java Basics - Anfänger-Themen 7
P Methode die ausgibt wie viele Primzahlen es zwischen 2 und n gibt Java Basics - Anfänger-Themen 10
G Primzahlen von Rekursiv nach Iterativ Java Basics - Anfänger-Themen 6
M Rekursives Programm zum Anzeigen von Primzahlen Java Basics - Anfänger-Themen 3
P Primzahl mit Angabe der höchsten Primzahl und Angabe der Anzahl von Primzahlen bis 100 Java Basics - Anfänger-Themen 8
Java The Hutt Primzahlen - die ersten 100 Java Basics - Anfänger-Themen 17
N Erste Schritte Primzahlen-ArrayIndexOutOfBounds Java Basics - Anfänger-Themen 23
R Primzahlen Zähler Programm / Benachbarte Primzahlen Java Basics - Anfänger-Themen 30
D Klassen Primzahlen überprüfen Java Basics - Anfänger-Themen 3
I Primzahlen Java Basics - Anfänger-Themen 17
Z Rekursion Primzahlen Java Basics - Anfänger-Themen 1
M Erste Schritte primzahlen ermitteln, nur zahlen als eingabe erlauben Java Basics - Anfänger-Themen 34
S Primzahlen berechnen funktioniert nicht richtig Java Basics - Anfänger-Themen 1
M Primzahlen, nur jede 2te ausgeben Java Basics - Anfänger-Themen 11
T Primzahlen Fehler Java Basics - Anfänger-Themen 4
K Primzahlen Java Basics - Anfänger-Themen 6
P Primzahlen Java Basics - Anfänger-Themen 3
A Methoden Primzahlen erstellen von 1 bis 100-Codeprobleme Java Basics - Anfänger-Themen 2
H Variablenverfolgung - Primzahlen Java Basics - Anfänger-Themen 7
G Primzahlen Java Basics - Anfänger-Themen 6
D Primzahlen und Rekursive Liste Java Basics - Anfänger-Themen 29
S Primzahlen bis 1000 ausgeben Java Basics - Anfänger-Themen 3
K Methoden Primzahlen Java Basics - Anfänger-Themen 33
S Input/Output Primzahlen Datenbank Java Basics - Anfänger-Themen 11
F Primzahlen in Zahlenblöcken ausgeben Java Basics - Anfänger-Themen 9
M Primzahlen - es werden alle Nicht-Primzahlen ausgegeben Java Basics - Anfänger-Themen 5
M primzahlen Java Basics - Anfänger-Themen 4
S Programm zu Ermittlung von Primzahlen Java Basics - Anfänger-Themen 14
E Programm zum Primzahlen ausgeben-Fehler Java Basics - Anfänger-Themen 12
X Primzahlen Java Basics - Anfänger-Themen 7
S Primzahlen Java Basics - Anfänger-Themen 12
B Programmierobjekt - Primzahlen Java Basics - Anfänger-Themen 2
D Primzahlen ausgeben. Wo liegt der Fehler? Java Basics - Anfänger-Themen 4
N Primzahlen Java Basics - Anfänger-Themen 5
I Primzahlen check, String prüfen lassen. Java Basics - Anfänger-Themen 6
A OOP Programm zum bestimmen von Primzahlen, OutofBoundsException Java Basics - Anfänger-Themen 10
apple987123 Primzahlen Java Basics - Anfänger-Themen 12
A Primzahlen: ein paar offene Fragen Java Basics - Anfänger-Themen 2
T Primzahlen Java Basics - Anfänger-Themen 6
G Primzahlen Java Basics - Anfänger-Themen 18
B Primzahlen berechnen - Wieso unterschiedliche Java Basics - Anfänger-Themen 3
B Primzahlen Algorithmus - wo ist der Fehler ? Java Basics - Anfänger-Themen 2
E Primzahlen Java Basics - Anfänger-Themen 5
H Miller Rabin Test Primzahlen werden teilweise nicht gefunden Java Basics - Anfänger-Themen 5
M Wer kann mir bei Primzahlen helfen ? Java Basics - Anfänger-Themen 4
G Frage zur Primzahlen berechnung Java Basics - Anfänger-Themen 11
kulturfenster Primzahlen berechnen Java Basics - Anfänger-Themen 11
D Primzahlen Java Basics - Anfänger-Themen 4
N Zerlegung in Primzahlen Java Basics - Anfänger-Themen 7
F Programm Primzahlen Java Basics - Anfänger-Themen 5
J Primzahlen errechnen.ArrayLists abgleichen Java Basics - Anfänger-Themen 2
M Primzahlen Java Basics - Anfänger-Themen 6
C Primzahlen Java Basics - Anfänger-Themen 7
C Primzahlen Java Basics - Anfänger-Themen 2
S Primzahlen Java Basics - Anfänger-Themen 49
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben