diff --git a/app/src/main/java/algorithms/Primes.java b/app/src/main/java/algorithms/Primes.java index 385bf27..ee12002 100644 --- a/app/src/main/java/algorithms/Primes.java +++ b/app/src/main/java/algorithms/Primes.java @@ -1,5 +1,5 @@ package algorithms; -import java.util.Vector; +import java.util.ArrayList; public class Primes { /** @@ -12,8 +12,9 @@ public static boolean IsPrime(int n) { if (n < 2) { return false; } - for (int i = 2; i < n; i++) { - if (n % i == 0 && i != n) { + // Optimize prime checking with square root limit + for (int i = 2; i <= Math.sqrt(n); i++) { + if (n % i == 0) { return false; } } @@ -28,9 +29,9 @@ public static boolean IsPrime(int n) { */ public static int SumPrimes(int n) { int sum = 0; - for (int i = 0; i < n; i++) { + for (int i = 2; i < n; i++) { if (IsPrime(i)) { - sum = sum + i; + sum += i; } } return sum; @@ -42,14 +43,23 @@ public static int SumPrimes(int n) { * @param n The number to find the prime factors of. * @return An vector of all prime factors of n. */ - public static Vector PrimeFactors(int n) { - Vector ret = new Vector(); + public static ArrayList PrimeFactors(int n) { + ArrayList ret = new ArrayList<>(); - for (int i = 2; i < n; i++) { - if (n % i == 0 && IsPrime(i)) { - ret.add(i); + for (int i = 2; i <= Math.sqrt(n); i++) { + while (n % i == 0) { + if (IsPrime(i)) { + ret.add(i); + } + n /= i; } } + + // If n > 1, it means n itself is a prime factor + if (n > 1) { + ret.add(n); + } + return ret; } -} +} \ No newline at end of file