/* Eratosthenes' Sieve */ /* Demand driven discipline */ /* File Eratosthenes_demand_driven.c */ #include class Item { protected: Item *source; public: virtual int out() {} }; class Generator: public Item { int value; public: int out() { return value++; } Generator(){source = 0; value = 2; } }; class Filter: public Item { int factor; public: int out() { int n; n = source->out(); while(!(n%factor)) { n = source->out(); } return n; } Filter(Item *src, int f){ source = src; factor = f; } }; class Sieve :public Item{ public: int out() { int n = source->out(); source = new Filter(source, n); return n; } Sieve(Item *src){source =src;} }; main() { Generator *g = new Generator(); Sieve s(g); int max; int n; n = s.out(); cout << "Input the upper bound" << '\n'; cin >> max; cout << "These are the prime numbers between " << 2 << " and " << max << '\n'; while (n