#include "MPQueue.h" #include "math.h" using namespace std; const int SPLIT = 1; // only one job type, so no // cases in MPQswitch void MPQswitch (Tjob & job) { int x; from_string (x, job.data); int sqt = int (sqrt (double (x))); for (int y = sqt; y > 1; y--) // search for divisors if (0 == x % y) { // found a divisor MPQsubmit (Tjob(SPLIT, x/y)); // submit two new jobs MPQsubmit (Tjob(SPLIT, y)); job.data = ""; // nothing for outqueue return; } } int main (int argc, char *argv[]) { MPQinit (argc, argv); MPQstart (); // only boss returns Tjobqueue inqueue, outqueue; int x = 1120581000; // factor this number inqueue.push(Tjob(SPLIT,x)); // add one job to the job queue MPQrunjobs (inqueue, outqueue); // supervise queue processing cout << x << " factors as:\n"; while (!outqueue.empty ()) { // get the results int factor; // one factor from_string(factor, outqueue.front().data); cout << factor << " "; outqueue.pop(); } MPQstop (); }