Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Bash-C Primzahlen
- Ersteller lassoheinz
- Erstellt am
- Registriert
- März 2019
- Beiträge
- 167
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....BeBur schrieb:primeZahl
simpsonsfan
Captain
- Registriert
- Feb. 2008
- Beiträge
- 3.402
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.
- Registriert
- März 2019
- Beiträge
- 167
achsoo jetzt versteh ich....d.h. mit der Wurzel Methode ist die Berechnung schneller als wenn man jeder zahl überprüft (:
simpsonsfan
Captain
- Registriert
- Feb. 2008
- Beiträge
- 3.402
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:
Man achte auf das j<a+1 in der inneren for-Schleife. Warum es nicht j<a ist, darfst du dir selbst überlegen.
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);
}
}
}
- Registriert
- März 2019
- Beiträge
- 167
Erste Überlegung:simpsonsfan schrieb:darfst du dir selbst überlegen
a = integer...
wenn bei der Wurzel Berechnung z.B. 44,7 rauskommt nimmt der integer 44 und nicht 45...?
R
RalphS
Gast
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.
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.
simpsonsfan
Captain
- Registriert
- Feb. 2008
- Beiträge
- 3.402
@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.
@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.
- Registriert
- März 2019
- Beiträge
- 167
@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
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
simpsonsfan
Captain
- Registriert
- Feb. 2008
- Beiträge
- 3.402
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.
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.
ModellbahnerTT
Banned
- Registriert
- Jan. 2010
- Beiträge
- 2.020
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.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.
- Registriert
- März 2019
- Beiträge
- 167
@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
(Ubuntu 18.04 2 LTS)
Danke für die Hilfe
ModellbahnerTT
Banned
- Registriert
- Jan. 2010
- Beiträge
- 2.020
Kann es sein das dir ein Paket gefehlt hat welches den Fehler ausgelöst hat?
- Registriert
- März 2019
- Beiträge
- 167
@ModellbahnerTT das vermute ich....
Ähnliche Themen
- Antworten
- 8
- Aufrufe
- 704
- Antworten
- 18
- Aufrufe
- 953
- Antworten
- 6
- Aufrufe
- 2.605
- Antworten
- 7
- Aufrufe
- 6.113