Primzahlberechnung

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo an alle...

Also hab hier ein Programm das nicht so richtig
funktionieren will.
Es soll für eine beliebige natürliche Zahl n die kleinste Primzahl
liefern, die größer oder gleich n ist.

Der Algorithmus zum Bestimmen, ob es eine Primzahl ist, müsste richtig sein.
Das Problem ist, dass er im hauptteil nicht "weiterzählt"... bitte helft mir

import algds.IOUtils;
public class NächstePrimzahl{
public static boolean result=true; //Annahme Zahl ist eine Primzahl
static int n;
public static boolean nextprim(int n){
if (n<2) result=false;
else
if (n==2) result=true;
else
for (int i=2 ; i*i<n; i++) // i rennt nur bis Wurzel n!
if (n % i == 0)
{
result=false;
}
else {
result=true;
}
return(result);
}


public static void main (String[] args){

System.out.println("Geben sie eine natuerliche Zahl ein: ");
int zahl=IOUtils.readInt();// <--- zu pruefende Zahl

if (nextprim(zahl)==true) {
System.out.println("Die nächste Primzahl ist: "+zahl);
}
else {
while (nextprim(zahl)==false){

zahl++;
nextprim(zahl);
}
}
}
}
 

Wildcard

Top Contributor
Habs dir ein bißchen performanter gestalltet:

Code:
public class NächstePrimzahl
{ 
    public static boolean result=true; //Annahme Zahl ist eine Primzahl 
    static int n; 
    public static boolean isPrim(long n)
    { 
        if (n==2) 
            return true;
        else if (n%2==0) 
            return false; 
        else 
       {
            for (long i=3 ; i*i<n+2; i+=2) // i rennt nur bis Wurzel n! 
            {
                if (n % i == 0) 
                { 
                    return false; 
                }  
            }         
       }
        return true;
    }


    public static void main (String[] args)
    { 

        System.out.println("Geben sie eine natuerliche Zahl ein: "); 
        long zahl=(long)1010;//IOUtils.readInt();// <--- zu pruefende Zahl 
        
        while (!isPrim(zahl))
        { 
            zahl++; 
        } 
        System.out.println("Die nächste Primzahl ist: "+zahl); 
       
        
    } 
}

nimm nächstes mal bitte CodeTags
 
G

Gast

Gast
Es funktioniert endlich,
frag mich nur warum es mit
while (!isPrim(zahl)
geht und mit meiner while-Schleife nicht.

Dankeschön!
 

Wildcard

Top Contributor
Wenn eine Zahl durch dein i geteilt werden kann, setzt du dein result auf false.
Da deine for schleife aber davon unberrührt ihre arbeit verrichtet wird in der
nächsten Iteration result wieder auf true gesetzt. Könnte nur dann funktionieren wenn
dein letztes i ein Teiler deiner zahl währ. ziemlich unwahrscheinlich :lol:
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben