University stuff.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

Main.java 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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. Timer t2 = new Timer().start();
  22. long[] factors = s.factor(sieve, j);
  23. System.out.println(
  24. t2.end().prettyTime()+": "+
  25. Util.factors(j, factors));
  26. /*
  27. if (j > (n - 5) || j < (n - 95)) {
  28. if (j == n - 96)
  29. System.out.println(".............");
  30. System.out.println(
  31. Util.factors(j, factors));
  32. }
  33. */
  34. }
  35. t.end();
  36. }
  37. return Timer.median(timers);
  38. }
  39. public static void main(String[] args) {
  40. if (args.length == 0) {
  41. System.out.println("Usage: java Main <biggest prime>");
  42. System.exit(1);
  43. }
  44. Sequential sseq = new Sequential();
  45. Parallel spar = new Parallel();
  46. //boolean findPrimes = true;
  47. boolean findPrimes = false;
  48. boolean factor = true;
  49. int maxNum = Integer.parseInt(args[0]);
  50. System.out.println("Max prime: "+maxNum);
  51. if (findPrimes) {
  52. System.out.println("\nFinding primes sequentially...");
  53. Timer seq = testFindPrimes(sseq, maxNum);
  54. System.out.println("Sequential: "+seq.prettyTime());
  55. System.out.println("\nFinding primes in parallel...");
  56. Timer par = testFindPrimes(spar, maxNum);
  57. System.out.println("Parallel: "+par.prettySpeedup(seq));
  58. }
  59. if (factor) {
  60. // We need a solved sieve
  61. Sieve sieve = new Sieve(maxNum);
  62. spar.solve(sieve);
  63. System.out.println("\nFactoring sequentially...");
  64. Timer seq = testFactor(sseq, maxNum, sieve);
  65. Timer seqAvg = new Timer(seq.time / 100);
  66. System.out.println(
  67. "Sequential: "+seq.prettyTime()+
  68. " ("+seqAvg.prettyTime()+" per factor)");
  69. System.out.println("\nFactoring in parallel...");
  70. Timer par = testFactor(spar, maxNum, sieve);
  71. Timer parAvg = new Timer(par.time / 100);
  72. System.out.println(
  73. "Parallel: "+par.prettySpeedup(seq)+
  74. " ("+parAvg.prettyTime()+" per factor)");
  75. }
  76. spar.stopThreads();
  77. }
  78. }