/* Primzahlenzwillinge finden basierend mit dem Sieb des Erathostenes, basierend auf der Sieb-Implementierung von Al Aburto */ #include #include char *sieve(long m) { register char *flags; register long i,prime,k; register long size; long j; char *ptr; size = m - 1; ptr = malloc(m); if( !ptr ) { perror("malloc failed"); exit(1); } flags = ptr; j = 0; for(i=0 ; i<=size ; i++) { *(flags+i) = 1; } for(i=0 ; i<=size ; i++) { if(*(flags+i)) { prime = i + i + 3; for(k = i + prime ; k<=size ; k+=prime) { *(flags+k)=0; } } } return flags; } long twins(char *flags, long m) { long i, r; for (i=0, r=0; i\n", argv[0]); exit(1); } limit = atol(argv[1]); m = (limit-1)/2; s = sieve(m); printf("%ld Primzahl-Zwillinge <= %ld\n",twins(s,m),limit); return 0; }