123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- class Main {
- static int nTests = 1;
-
- static Timer testFindPrimes(Solver s, int maxNum) {
- Timer[] timers = new Timer[nTests];
-
- for (int i = 0; i < nTests; ++i) {
- Timer t = timers[i] = new Timer();
-
- Sieve sieve = new Sieve(maxNum);
-
- t.start();
- s.solve(sieve);
- t.end();
- }
-
- return Timer.median(timers);
- }
-
- static Timer testFactor(Solver s, long maxNum, Sieve sieve) {
- Timer[] timers = new Timer[nTests];
-
- for (int i = 0; i < nTests; ++i) {
- Timer t = timers[i] = new Timer();
- t.start();
- long n = maxNum * maxNum;
- for (long j = n; j >= n - 100; --j) {
-
- long[] factors = s.factor(sieve, j);
-
- if (j > (n - 5) || j < (n - 95)) {
- if (j == n - 96)
- System.out.println(".............");
-
- System.out.println(
- Util.factors(j, factors));
- }
- }
- t.end();
- }
-
- return Timer.median(timers);
- }
-
- public static void main(String[] args) {
- if (args.length == 0) {
- System.out.println("Usage: java Main <biggest prime>");
- System.exit(1);
- }
-
- Sequential sseq = new Sequential();
- Parallel spar = new Parallel();
-
- boolean findPrimes = true;
- boolean factor = true;
-
- int maxNum = Integer.parseInt(args[0]);
- System.out.println("Max prime: "+maxNum);
-
- if (findPrimes) {
- System.out.println("\nFinding primes sequentially...");
- Timer seq = testFindPrimes(sseq, maxNum);
- System.out.println("Sequential: "+seq.prettyTime());
-
- System.out.println("\nFinding primes in parallel...");
- Timer par = testFindPrimes(spar, maxNum);
- System.out.println("Parallel: "+par.prettySpeedup(seq));
- }
-
- if (factor) {
- // We need a solved sieve
- Sieve sieve = new Sieve(maxNum);
- spar.solve(sieve);
- sieve.getPrimes();
-
- System.out.println("\nFactoring sequentially...");
- Timer seq = testFactor(sseq, maxNum, sieve);
- Timer seqAvg = new Timer(seq.time / 100);
- System.out.println(
- "Sequential: "+seq.prettyTime()+
- " ("+seqAvg.prettyTime()+" per factor)");
-
- System.out.println("\nFactoring in parallel...");
- Timer par = testFactor(spar, maxNum, sieve);
- Timer parAvg = new Timer(par.time / 100);
- System.out.println(
- "Parallel: "+par.prettySpeedup(seq)+
- " ("+parAvg.prettyTime()+" per factor)");
- }
-
- spar.stopThreads();
- }
- }
|