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.

Sequential.java 963B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import java.util.ArrayList;
  2. class Sequential implements Solver {
  3. public void solve(Sieve sieve) {
  4. sieve.generatePrimes();
  5. }
  6. public long[] factor(Sieve sieve, long num) {
  7. if (num < sieve.maxNum && sieve.isPrime((int)num))
  8. return new long[] { num };
  9. int sqrt = (int)Math.sqrt(num);
  10. ArrayList<Long> arr = new ArrayList<>();
  11. // Easier to assume all primes are odd
  12. while (num % 2 == 0) {
  13. arr.add(new Long(2));
  14. num /= 2;
  15. }
  16. // Find factors
  17. long prime;
  18. for (prime = 3; prime <= sqrt; prime += 2) {
  19. if (!sieve.isPrime((int)prime))
  20. continue;
  21. if (num % prime == 0) {
  22. do {
  23. arr.add(new Long(prime));
  24. num /= prime;
  25. } while (num % prime == 0);
  26. sqrt = (int)Math.sqrt(num);
  27. }
  28. }
  29. // Add num if we didn't find all the factors before sqrt(num)
  30. if (num != 1)
  31. arr.add(new Long(num));
  32. long[] a = new long[arr.size()];
  33. for (int i = 0; i < a.length; ++i) {
  34. a[i] = arr.get(i);
  35. }
  36. return a;
  37. }
  38. }