HTTP-Daten von 'primzahlen_cli.txt'

Schalten sie die Zeilen-Nummern mit MausKlick ab, wenn sie die Datei am eigenen PC speichern wollen.

1
/*
2
   Primzahlen.c
3
   CLI-Version 2012-05-01
4
   made by peter.schindler
5
*/
6
#include <stdio.h>
7
#include <stdlib.h>
8
#include <time.h>
9
#define pntyp long int unsigned
10

11
pntyp * prime_numbers_init(pntyp);
12
void prime_numbers_eliminate(pntyp,pntyp,pntyp*);
13
pntyp prime_number_next(pntyp,pntyp,pntyp*);
14

15
int main() {
16
   pntyp nmax,i,pn,*pa;
17
   double t;
18
   clock_t c_start,c_stop;
19

20
   printf("##### Primzahlen #####\n");
21
   printf("Das Programm sucht Primzahlen mit dem 'Sieb des Eratosthenes'\n");
22
   printf("Geben sie die obere Grenze der zu durchsuchenden Zahlen an.\n");
23
   printf("Obergrenze = ");
24
   scanf("%ld",&nmax);
25
   if(nmax<10){nmax=10;}
26
   pa=prime_numbers_init(nmax);
27

28
   // Sieve
29
   c_start=clock();
30
   printf("\n1 ");
31
   i=1; pn=2;
32
   while(pn) {
33
      i++;
34
      printf("%ld ",pn);
35
      if(!(i%8)) {printf("\n");}
36
      prime_numbers_eliminate(pn,nmax,pa);
37
      pn=prime_number_next(pn,nmax,pa);
38
   }
39
   c_stop=clock();
40
   printf("\n");
41
   free(pa);
42
   printf("\nDurchsuchte Zahlen:   1-%ld\n",nmax);
43
   printf("Anzahl der gefundenen Primzahlen: %ld\n",i);
44
   t=(double)(c_stop-c_start)/(double)CLOCKS_PER_SEC;
45
   if(t) {
46
      printf("Zeit (Berechnung + Ausgabe):\n");
47
      printf("\t%lf Sekunden = %lf us / Treffer\n",t,t*1000000/(double)i);
48
   }
49
   else{printf("Zeit < 1/%ld Sekunde\n",CLOCKS_PER_SEC);}
50
   return 0;
51
}
52

53
pntyp * prime_numbers_init(pntyp nmax) {
54
   pntyp i,*pa;
55
   // Allocate heap
56
   i=(nmax+1)*sizeof(pntyp); // Bytes
57
   pa=(pntyp*)malloc(i);
58
   // Init Array
59
   pa[0]=0; pa[1]=0;
60
   for(i=2;i<=nmax;i++) {*(pa+i)=i;}
61
   return pa;
62
}
63

64
void prime_numbers_eliminate(pntyp pn,pntyp nmax,pntyp *pa) {
65
   pntyp i;
66
   *(pa+pn)=0;
67
   i=pn*pn;
68
   while(i<=nmax) {
69
      *(pa+i)=0;
70
      i+=pn;
71
   }
72
}
73

74
pntyp prime_number_next(pntyp pn,pntyp nmax,pntyp *pa) {
75
   pntyp i;
76
   i=pn+1;
77
   pn=0;
78
   while(i<nmax) {
79
      if(*(pa+i)) {pn=i; i=nmax;}
80
      i++;
81
   }
82
   return pn;
83
}
84