Målet: At oprette en liste med alle primtalene fra 0x0 til 0xffff.
Hvorledes gøres dette hurtigst? Jeg tror jeg er kommet op med en god metode, men der er noget der irriterer mig, selvom jeg ikke ved hvad det er, er det som om der er noget der ikke er som det skal være, så kommentarer er velkomne.
Her er koden (mad manglende kommentarer. Beklager)
#include <bitset>
class Prime {
std::bitset<0xffff> Pb;
public:
Prime():Pb(1) {
Pb.flip();
for(unsigned long n = 1; n < 0xff;) {
for(unsigned long i = (2*n)+1; i < 0xffff; Pb.reset(i), i += n+1) {}
do {
n++;
} while(Pb[n] != 1);
}
}
};
Konceptet er ganske enkelt. istedet for at have en vector el.lign. indeholdene indeholdene alle primtalende op til 0xffff bruger jeg et bitset som representerer alle de naturlige tal i rangen. De enkelte bits er så sat til enten 0 eller 1 afhænging af om de er primtal eller ej.