cdef extern from "stdlib.h": ctypedef int size_t void *malloc(size_t size) void free(void *ptr) def n_primzahlen(int n): if n < 0: raise ValueError("n darf nicht negativ sein") cdef int kandidat, n_aktuell, index cdef int *primzahl primzahl = malloc(n * sizeof(int)) if primzahl == NULL: raise MemoryError("Speicherreservierung fehlgeschlagen") try: ergebnis = [] n_aktuell = 0 kandidat = 2 while n_aktuell < n: index = 0 while index < n_aktuell and kandidat % primzahl[index] != 0: index = index + 1 if index == n_aktuell: primzahl[n_aktuell] = kandidat n_aktuell = n_aktuell + 1 ergebnis.append(kandidat) kandidat = kandidat + 1 # C ints können "umklappen" if kandidat < 0: raise OverflowError("Integer-Ueberlauf") finally: free(primzahl) primzahl = NULL return ergebnis