One solution would be to change LinkedList
to ArrayList
and change the second loop that uses j
variable to start from i
as solutions 2 to i
were already checked.
This solution improved execution time from 0.67 sec to 0.09 sec:
import java.util.LinkedList;
import java.util.ArrayList;
public class LinkedListEx {
public static void main(String[] args) {
long startTime = System.nanoTime();
List<Integer> ll = new ArrayList<Integer>();
for(int i = 2; i< 10000; i++)
{
ll.add(i);
}
int ls = ll.size();
for(int i=2; i < ls/2; i++)
{
// start from i
for(int j =i; j<ls/2; j++)
{
int x = i*j;
if(x<ls)
ll.remove(new Integer(x));
}
int y = i*i;
if(y<ls)
ll.remove(new Integer(y));
}
long endTime = System.nanoTime();
double timeTakenToExecuteInSeconds = (double)(endTime - startTime)/1_000_000_000.0;
System.out.println(ll);
System.out.println(timeTakenToExecuteInSeconds);
}
}