Primzahlen


Das folgende Programm habe ich auf dem San Diego Meeting der C++ Standardisierung geschrieben. Es berechnet Primzahlen während der Übersetzung. Es wurde noch auf dem Meeting ausprobiert. Dank dafür Tom Pennello von Metaware. Da sich die Sprache seit dem etwas verändert hat, ist das Original nicht mehr gültiges C++. Hier die lauffähige Version:

// Prime number computation by Erwin Unruh

template <int i> struct D { D(void*); operator int(); };

template <int p, int i> struct is_prime {
 enum { prim = (p==2) || (p%i) && is_prime<(i>2?p:0), i-1> :: prim };
};

template <int i> struct Prime_print {
 Prime_print<i-1> a;
 enum { prim = is_prime<i, i-1>::prim };
 void f() { D<i> d = prim ? 1 : 0; a.f();}
};

template<> struct is_prime<0,0> { enum {prim=1}; };
template<> struct is_prime<0,1> { enum {prim=1}; };

template<> struct Prime_print<1> {
 enum {prim=0};
 void f() { D<1> d = prim ? 1 : 0; };
};

#ifndef LAST
#define LAST 18
#endif

main() {
 Prime_print<LAST> a;
 a.f();
}



Erwin Unruh, 1. 1. 2002