University stuff.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Main.java 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. class Main {
  2. static int nTests = 1;
  3. static Timer testFindPrimes(Solver s, int maxNum) {
  4. Timer[] timers = new Timer[nTests];
  5. for (int i = 0; i < nTests; ++i) {
  6. Timer t = timers[i] = new Timer();
  7. Sieve sieve = new Sieve(maxNum);
  8. t.start();
  9. s.solve(sieve);
  10. t.end();
  11. }
  12. return Timer.median(timers);
  13. }
  14. static Timer testFactor(Solver s, long maxNum, Sieve sieve) {
  15. Timer[] timers = new Timer[nTests];
  16. for (int i = 0; i < nTests; ++i) {
  17. Timer t = timers[i] = new Timer();
  18. t.start();
  19. long n = maxNum * maxNum;
  20. for (long j = n; j >= n - 100; --j) {
  21. long[] factors = s.factor(sieve, j);
  22. if (j > (n - 5) || j < (n - 95)) {
  23. if (j == n - 96)
  24. System.out.println(".............");
  25. System.out.println(
  26. Util.factors(j, factors));
  27. }
  28. }
  29. t.end();
  30. }
  31. return Timer.median(timers);
  32. }
  33. public static void main(String[] args) {
  34. if (args.length == 0) {
  35. System.out.println("Usage: java Main <biggest prime>");
  36. System.exit(1);
  37. }
  38. Sequential sseq = new Sequential();
  39. Parallel spar = new Parallel();
  40. boolean findPrimes = true;
  41. boolean factor = true;
  42. int maxNum = Integer.parseInt(args[0]);
  43. System.out.println("Max prime: "+maxNum);
  44. if (findPrimes) {
  45. System.out.println("\nFinding primes sequentially...");
  46. Timer seq = testFindPrimes(sseq, maxNum);
  47. System.out.println("Sequential: "+seq.prettyTime());
  48. System.out.println("\nFinding primes in parallel...");
  49. Timer par = testFindPrimes(spar, maxNum);
  50. System.out.println("Parallel: "+par.prettySpeedup(seq));
  51. }
  52. if (factor) {
  53. // We need a solved sieve
  54. Sieve sieve = new Sieve(maxNum);
  55. spar.solve(sieve);
  56. sieve.getPrimes();
  57. System.out.println("\nFactoring sequentially...");
  58. Timer seq = testFactor(sseq, maxNum, sieve);
  59. Timer seqAvg = new Timer(seq.time / 100);
  60. System.out.println(
  61. "Sequential: "+seq.prettyTime()+
  62. " ("+seqAvg.prettyTime()+" per factor)");
  63. System.out.println("\nFactoring in parallel...");
  64. Timer par = testFactor(spar, maxNum, sieve);
  65. Timer parAvg = new Timer(par.time / 100);
  66. System.out.println(
  67. "Parallel: "+par.prettySpeedup(seq)+
  68. " ("+parAvg.prettyTime()+" per factor)");
  69. }
  70. spar.stopThreads();
  71. }
  72. }