Beitrag
Fleet Admiral
- Registriert
- Nov. 2011
- Beiträge
- 10.777
Hallo Leute,
ein Kommilitone hat ein kleines C-Programm für Primzahlen geschrieben.
Wir wollten mal gucken, wie lange es auf meinem System dauert, bis es fertig ist. Also hat er mir den Quellcode geschickt und ich hab's bei mir unter Win 10 compiliert (MinGW). Allerdings ist es nach allerspätestens einer Minute abgestürzt und hat nichts berechnet.
Ich hab dann das Linux-Subsystem von Windows aktiviert und lasse es gerade darüber laufen - funktioniert einwandfrei.
Mich würde jetzt interessieren, was hier die Probleme macht und wie man es plattformübergreifend lauffähig machen könnte.
Ach und bitte möglichst einfach erklären. Meine Kentnisse in C und Linux sind rudimentär.
Danke.
ein Kommilitone hat ein kleines C-Programm für Primzahlen geschrieben.
Wir wollten mal gucken, wie lange es auf meinem System dauert, bis es fertig ist. Also hat er mir den Quellcode geschickt und ich hab's bei mir unter Win 10 compiliert (MinGW). Allerdings ist es nach allerspätestens einer Minute abgestürzt und hat nichts berechnet.
Ich hab dann das Linux-Subsystem von Windows aktiviert und lasse es gerade darüber laufen - funktioniert einwandfrei.
Mich würde jetzt interessieren, was hier die Probleme macht und wie man es plattformübergreifend lauffähig machen könnte.
Ach und bitte möglichst einfach erklären. Meine Kentnisse in C und Linux sind rudimentär.
Code:
#include <time.h>
#include <stdio.h>
/*Aufgabe 4*/
void primes(void)
{
int start_time;
int end_time;
int primes[1999999]; /*Feld, um Primzahlen zu speichern*/
int n; /*n ist eine Zahl*/
int count; /*Anzahl der bisher gefundenen Primzahlen*/
int isprime; /*variable, die den Status einer Zahl (Prim bzw. nicht Prim) speichert*/
int t; /*Laufvariable für primes*/
int z; /*Laufvariable für die Ausgabe der Primzahlen*/
start_time = clock()/CLOCKS_PER_SEC;
primes[0]=2;/*die erste Primzahl ist die 2*/
/*jede Zahl n untersuchen*/
for(n=3,count=1; count<2000000; ++n)
{
isprime=1; /*ich gehe davon aus, dass n eine primzahl ist*/
/*n durch jede bisher gefundene Primzahl versuchen zu teilen*/
for(t=0; t<count; ++t)
{
if(n % primes[t] == 0) {
isprime = 0; /*n kann keine Primzahl sein, also isprime entsprechend setzen*/
break;
}
}
/*falls isprime hier immer noch 1 ist, ist n eine Primzahl*/
if(isprime) {
if( (count+1)%10000 == 0) printf("Found the %d. prime number...\n", count+1);
primes[count++]=n; /*NACHDEM n in primes gespeichert wird, wird count inkrementiert*/
}
}
end_time = clock()/CLOCKS_PER_SEC;
/*Ausgabe der Primzahlen*/
for(z=0; z<count; ++z) {
printf("Die %d. Primzahl lautet: %d\n", z+1, primes[z]);
}
printf("Calculation time: %d seconds.\n", end_time-start_time);
}
int main(void)
{
primes();
return 0;
}
Danke.