# sieb des eratosthenes ohne boolean



## Tunnel (9. Feb 2011)

Hallo leute ich soll für ein Programm in java schreiben, welches für die zahl 12345 nach dem sieb des eratosthenes alle primzahlen in blöcken geordnet ausgibt. das ist ja alles soweit schön und gut =) das haben schon tausend andere vor mir programmiert. jedoch habe ich einen anfang gegeben bekommen, welchen ich nicht verändern darf. nun weiß ich jetzt leider nicht wie ich hier weitermachen soll:


```
public class B {
   static final int N=12345;
   static char f[] = new char[(N+1)/2];
```
nun kann ich ja nichtmehr mit boolean arbeiten, somit kann ich auch keine nicht-primzahlen als false setzen und rauswerfen oder? ich weiß nicht wie ich mit diesem codeschnipsel weiter hantieren kann. 
Danke schonmal für eure hilfe =)

lg Tunnel


----------



## Marco13 (9. Feb 2011)

Mal im ernst: Ob man ein boolean-Array hat, oder einen int-Array, ist eigentlich egal. In einem int-Array kann "0" für "false" stehen, und jede andere Zahl für "true".


----------



## chalkbag (9. Feb 2011)

Wenn ich dich richtig verstehe,

sollst du von 1- 12345 alle Primzahlen ausgeben, unter den von dir angegebenen Verfahren.

An sich ist dir ja nur die Obergrenze vorgegeben und ein Array, in welches du deine gefunden Primzahlen speichern sollst

Du müsstest ja dann nur 

[Pseudocode]


```
for (i = 1; i <= N; i++) {
      if (isPrimzahl(i) == true) {
         f[primCounter] = i;
         primCounter++;

}
}
```


----------



## Tunnel (9. Feb 2011)

Aber gehst du hier nicht nur einfach alle zahlen von 1 bis 12345 durch?
Naja ich weiß nicht wie ich folgende grundüberlegung mit meinem gegebenen beginn programmieren kann: 
ich würde mir theoretisch denken p= 2, dann gehe ich alle t*p durch und schmeiße sie raus. die nächste zahl die übrig geblieben ist setze ich p. und dann mache ich das solange weiter bis nichtsmehr rausfliegt.

wie geht sowas?

danke schonmal bis hierhin =)


----------



## Tunnel (9. Feb 2011)

So, ich habe jetzt noch einmal ein bisschen durchprobiert und folgenden Quelltext:

```
public class Sieb {
	static final int N=100;
	   static int f[] = new int[(N+1)/2];

  public static void main(String[] args) {
	  //erstellen des Arrays
	  int N2=(N+1)/2;
	  for (int i=1; i<N2;i++){
		  int g= (i*2)-1;
		  f[i]= g;
	  }
	  sieb();
  }
  
  private static void sieb(){
	  int N2=(N+1)/2;
	  for(int i=0;i<N2;i++){
		  for(int c=2;c<i;c++){
			  if(f[i]%c==0){
			  f[i]=0;
		  }
		  }
		  
		  if(f[i]!=0){
			  
		  System.out.println(f[i]);
	  }
	  
	  }
  }
}
```

Ich habe das Array jedoch wie ihr seht aus Integervariablen zusammengestellt, was ja leider in der aufgabe mit char gemacht werden MUSS. Nur weiß ich nicht, wie ich f_=g die integer variable g dem char f dann zuordnen kann, ohne dass er daraus ein Asciizeichen macht. Vielleicht hat jemand von euch da eine Lösung_


----------



## Marco13 (9. Feb 2011)

Was genau meinst du? In der Aufgabenstellung stand ja ein char, warum hast du jetzt int verwendet? (Der Unterschied ist hier nur marginal, aber dein Lehrer könnte das anders sehen  ). Geht es um die Ausgabe am Ende? Um einen char nicht als Zeichen, sondern als Zahl auszugeben, tut's schon ein
System.out.println(*(int)*einChar);


----------



## XHelp (9. Feb 2011)

Der Algo sieht auch auf den ersten Blick nicht richtig aus. 2 Schleifen zu haben ist schon nicht verkehrt. Aber die Schleifenköpfe sind falsch.


----------

