Bash-C Primzahlen

'primeZahl' ist seltsames denglisch. 'isPrime' oder einfach 'prime'.
Es sollte so sein, dass 'prime = 1' impliziert, dass es sich um eine Primzahl handelt.
 
BeBur schrieb:
wollte primZahl schreiben habe es aber außer beim define falsch geschrieben...darum habe ich es dann gelassen und den define auf das "Denglisch" primeZahl geändert....
 
Ja, die Ergebnisse stimmen, wenn du alle Teiler bis zu der letzten Zahl durchgehst. Dafür kannst du auch a=i schreiben. Dennoch hat der ^-Operator hier nichts mit einer Potenz oder Wurzel zu tun.
 
achsoo jetzt versteh ich....d.h. mit der Wurzel Methode ist die Berechnung schneller als wenn man jeder zahl überprüft (:
 
Ja, zumindest bei hohen Endwerten. Wenn du bis bspw. eine Milliarde hoch gehst, wird es sicher schneller sein, die Überprüfung bei der Wurzel als größten Teiler zu beenden.
Wenn du nur bis 100 gehst, läuft das Programm sowieso so schnell, dass ein Zeitunterschied nur gering sein wird, zumal durch die Wurzelberechnung ja auch wieder ein gewisser Overhead entsteht.
Mit Wurzel würde es übrigens so in der Art aussehen:
C:
#include <stdio.h>
// math.h --> sqrt(wurzel) funktioniert nicht

#include <math.h>

main() {
 int a = 0;
 int b = 0;
 int i = 0;
 int end =0;
 int primeZahl = 0;
 double test=0.5;

 printf("Bis zu welcher Zahl soll die Primzahlen-Berechnung\n durchgeführt werde n: ");
 scanf("%d", &end);

 for(i=2; i<end; i++)
 {
  // Wurzel berechnung
  a = floor(sqrt(i));
  primeZahl = 0;
  for(int j=2; j<a+1; j++)
  {
   if((i%j) == 0)
   {
    primeZahl = 1;
   }
  }
 if(primeZahl == 0)
  {
   printf("Primzahl: %d\n", i);
  }
 }
}
Man achte auf das j<a+1 in der inneren for-Schleife. Warum es nicht j<a ist, darfst du dir selbst überlegen.
 
Primzahlen bestimmen sich besser per Primzahlzerlegung. Warum soll ich prüfen, ob 20 : 10 einen Rest läßt, wenn ich schon weiß, daß 20: 2 (2*5) keinen läßt?

Hintergrund: Eine Zahl ist genau dann Primzahl, wenn sie NUR durch 1 oder sich selbst teilbar ist.

Also dividieren wir NUR durch bisher gefundene Primzahlen. Reicht völlig. Wenn einmal (nur einmal!) Rest 0 rauskam: Abbrechen, da kein PZ. Das ist der Normalfall.

Wenn aber keine der bisher gefundenen PZ den Kandidaten teilt, dann ist dieser notwendigerweise eine PZ.

Läuft also effizient.
 
@RalpS, ja, effizient ist diese Methode nicht, aber ich denke darum sollte es dem TE hier noch gar nicht gehen, sondern erstmal um ein Grundverständnis der Sprache.
@LaRsX Eine sinnvolle Überlegung, aber nicht das, auf was ich hinaus wollte. Ohne das +1 werden bspw. 4 und 9 als Primzahl ausgegeben. Überlege dir warum. D.h., geh den Algorithmus nach und nach durch, und überleg dir, welche Werte die Variablen haben, welche Schleife ausgeführt wird etc.
Und später verwende dazu den Debugger, dann hast du einen besseren Überblick.
 
@simpsonsfan ich bin zurzeit noch auf Linux(ubuntu)(vor 5 monaten hatte ich noch win7) unterwegs d.h. die sache mit dem Debugger dauert noch 2 wochen bis das letzte teil von meine PC kommt auf dem dann WIN10 läuft wo ich dann alles was ich zum Programmieren benötige nur herunterladen muss...

bsp. Habe auf den Rechner CodeBlocks heruntergeladen, kann es starten und nur schon wenn ich das "Hello World" Programm Compilen will spuckt er ein error aus. Doch ich finde den fehler nicht....
naja das was ich sagen will ist ich bin jetzt bis abends weg und werde mir dann gedanken bezüglich des Primzahlen programms machen.

LG
 
Es gibt auch auf für Linux gute IDEs zur C-Entwicklung. Und wenn's schnell gehen soll, unter https://www.onlinegdb.com/online_c_compiler kannst du ebenfalls den gnu Debugger verwenden.
Ich will jetzt nur nicht vorgreifen und sagen, auf was ich hinaus will, weil ich der Meinung bin, dass es deinem Verständnis mehr bringt, wenn du das selbst durchgehst. Wenn du heute abend einfach mal durchspielst, was bei i=9 in den beiden Varianten mit j<a+1 und j<a jeweils passiert, solltest du drauf kommen.
 
LaRsX schrieb:
Habe auf den Rechner CodeBlocks heruntergeladen, kann es starten und nur schon wenn ich das "Hello World" Programm Compilen will spuckt er ein error aus.
Welches Ubuntu? Hast du in den Einstellungen von CodeBlocks etwas geändert? Poste bitte mal das "Hello World" Programm welches Fehler ausgibt. Probleme mit einer IDE kannst du unter Windows genauso haben wie unter Linux.
 
@ModellbahnerTT habe gerade KDevelop heruntergeladen das auch nicht funktioniert und danch wollte ich hier ein thema erstellen und ein screenshot vom fehlercode(codeblock) senden, doch jezt funktioniert der Compiler.....aber das mit dem Debuggen haut nicht ganz hin, bzw muss ich noch schauen wie das in Code::Blocks funktioniert (:
(Ubuntu 18.04 2 LTS)
Danke für die Hilfe
 
Zurück
Oben