Falls mir jemand mit einem Lösungsansatz helfen könnte.

Status
Nicht offen für weitere Antworten.
M

MarieMS

Gast
Ich muss gerade folgende Aufgabe bearbeiten und hab gerade ein Brett vor´m Kopf.

Falls mir da einer mit einem Lösungsansatz/Vorgehensweise weiterhelfen kann, wäre ich dankbar.

Wie gesagt, ich möchte hier keine Lösungen abschreiben, sondern nur meinen Gedanken auf die Sprünge helfen.

Ja und für viele hier wird diese Aufgabe trivial sein, ich weiss :wink:

"Schreiben Sie eine Klasse InterestingNumbers, die die folgenden statischen Methoden enthält:

- die Methode boolean isPrime (long n) überprüft, ob die übergebene Zahl n eine Primzahl ist.

- eine Methode long [] getPrimes (int n), welche ein Array der ersten n Primzahlen zurückgibt. Die erste Primzahl sei dabei 2.

Versehen Sie diese Klasse mit einer Testmethode mit sinnvollen Ausgaben und aussagekräftigen javadoc-Kommentaren."

Danke für evt Tipps.
 
M

MarieMS

Gast
Soweit alles klar, allerdings bekomme ich die Teilaufgabe mit dem Array nicht hin.... :bahnhof:
 
G

Guest

Gast
Vorallem eben wie ich den Primzahl-Test (also die 1. Methode) jetzt in die Methode getPrimes implementiere/aufrufe.

Und eben wie ich die Ausgabe des Arrays mit den n-Einträgen hinbekomme.

Konnte mich noch nicht so mit Arrays beschäftigen....aber morgen ist Abgabe...aber die Nacht ist ja noch früh :wink:
 
M

MarieMS

Gast
static boolean isPrime( long n ) {

long mod = 1;
for ( int i = 2, end = (int)Math.sqrt(n); i <= end && mod != 0; i++ )
mod = n % i;
return ( mod != 0 );
}


Das ist mein Primzahlentest
 

Wildcard

Top Contributor
Vermute mal du wirst vor der Abgabe noch mal hier rein schaun,
dann kannst du's vergleichen :wink:
Hab dein isPrime etwas performanter gemacht:

Code:
    public static boolean isPrime(long n)
    {
        if (n<2)
            return false;
        if (n==2)
            return true;
        if (n%2==0)
            return false;
        
        long end = (long)Math.sqrt(n);
        
        for (int i = 3; i<end;i+=2)
        {
            if (n%i==0)
                return false;
        }
        return true;
    }

    public static long[] getPrimes(int n)
    {
        long [] primes = new long[n];
        int count = 1; 
        int i=3;
        primes[0] = 2;
        
        while (count<n)
        {
            if (isPrime(i))
            {
               
                primes[count] = i;
                count++;
            }
            i+=2;
        }
        return primes;    
    }
 
M

MarieMS

Gast
Ich bin froh, wenn meine Lösungen ohne Compiler-Fehler laufen, also auf die Performance schau ich erst später, wenn ich den Dreh besser raus habe.

Meine Arrayversion lief immer noch nicht. Aber wenn ich Deine Version sehe, sieht alles logisch aus :idea:

Ich habe prinzipiell sowieso das Problem aus einer Vorgabe ein laufendes Programm/Methode zu machen. Ich versteh was gemeint ist, aber schaff es nicht, es mir dann in Java zusammenzubasteln bzw den geeigneten Programmablauf zu finden.

Aber wohl das typische Anfängerproblem.

Mal sehen, ob ich jetzt meine Version doch noch ans Laufen bekomme *wo ist mein Kaffee*
 

Jaraz

Bekanntes Mitglied
Hi,

wenns auch noch einigermaßen performant sein soll und mathematisch noch relativ leicht verständlich, suche mal nach dem "Sieb des Eratosthenes".

Code:
// Eratosthenes.java

import java.io.*;

public class Eratosthenes {
	static PrintWriter out = new PrintWriter(System.out, true);

	static final int n = 10000000;

	static int quadrat = 0, anz = 0;

	static boolean[] Sieb = new boolean[n];

	public static void main(String[] args) {
		for (int i = 0; i < n; i++)
			Sieb[i] = true;
		Sieb[0] = false;
		Sieb[1] = false;
		for (int i = 1; i < n; i++) {
			quadrat = quadrat + 2 * i - 1; // (i+1)*(i+1)=i*i+2*(i+1)-1
			if (quadrat > n)
				break; // Schleifenabbruch wenn i*1>n
			if (Sieb[i])
				for (int j = 2 * i; j < n; j += i)
					Sieb[j] = false;
		} // nun stehen nur noch Primzahlen in der Liste
		for (int i = 0; i < n; i++){
			if (Sieb[i]) {
				out.print(i);
				out.print("\t");
				anz++;
				if (anz == 25) {
					anz = 0;
					out.println();
				}
			}
		}
	}
}

Gruß Jaraz
 

Bobo

Mitglied
hey wildcard wie baue ich dein primzahlentest in mein programm ein?
Code:
import java.io.*;
public class Test
{
	public static void main (String args[])
	throws IOException
	{{
		
double c=1, d=1, e=2, f=2, g;                                              
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
System.out.println("Der 'Quadratrest-Generator'! "); 
System.out.println();
System.out.println("Geben Sie eine Primzahl ein"); 
c = Double.parseDouble(br.readLine());                 
double prim1=Math.sqrt(d);
for (e=2; e<prim1; e++)
	{                       
		if (c%e==0)
		{
		System.out.println("Das ist keine Primzahl!");
		System.out.println("Geben Sie eine Primzahl ein"); 
		prim1 = Double.parseDouble(br.readLine());
		}
	}                                                 

System.out.println("Geben Sie eine zweite Primzahl ein!"); 
d = Double.parseDouble(br.readLine()); 
double prim2=Math.sqrt(e);
for (f=2; f<prim2; f++)
	{                       
		if (d%f==0)
		{
		System.out.println("Das ist keine Primzahl!");
		System.out.println("Geben Sie eine Primzahl ein"); 
		prim2 = Double.parseDouble(br.readLine());
		}
	}                                                   
System.out.println("Geben Sie eine Zahl zwischen 2 und "+c*d+" als Startwert ein!"); 
c = Double.parseDouble(br.readLine()); 
                     
while (c<3 || c>(c*d)-1) 
	{ 
	System.out.println("Geben Sie eine Zahl zwischen 2 und "+c*d+" als Startwert ein!"); 
	c = Double.parseDouble(br.readLine()); 
	} 
System.out.println("Geben Sie die Anzahl der Wiederholungen ein!"); 
g = Double.parseDouble(br.readLine()); 
double h;                     
for (h=g; h<0; h-- ) 
	{
	g=g-1; 
	c=c*c; 
	f=(float)(c/(c*d));                     
	}
while (g<1)
{
	System.out.println("Die Zahl muss groesser 0 sein!");
	System.out.println("Geben Sie die Anzahl der Wiederholungen ein!"); 
	g = Double.parseDouble(br.readLine()); 
}	 
System.out.println("Die generierte Zahl lautet: "+f+"."); 
}}}
 

Wildcard

Top Contributor
[edit by stevg]
:noe: Ich zieh das konsequent durch.

Kann doch nicht sein dass man Code kopiert und dann noch gefragt wie man den in sein Programm einbauen muss.
[/edit]
[edit by Wildcard]
hast ja recht :wink:
[/edit]
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben