Hej,
program ze strony SPOJ wyszukujący liczy pierwsze z zadanego przedziału. Wydaje mi się, że działa OK, problemem jest szybkość jego działania. Na stronie SPOJ dostaję info": time limit exeeded. Będę wdzięczny gdyby ktoś mógł rzucić okiem i dać jakąś wskazówkę jak go przyśpieszyć.
p.s - przeraszam za brak konsekwencji w nazewnictwie
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* Created by Tomek on 10/13/2016.
*/
class Sieve
{
private int[] tab;
private int sqrt;
int range=0;
int down=0;
Sieve(int down, int up)
{
this.down=down;
range=up-down+1;
sqrt = (int)Math.sqrt(up);
tab = new int[range];
for(int i=0; i<range; i++)
{
tab[i]=i+down;
}
}
public void odsiew()
{
int index=2;
while(index<=sqrt)
{
for(int i=0; i<tab.length; i++)
{
if(tab[i]==1)
tab[i]=0;
if (tab[i] % index == 0 && tab[i]!= index)
tab[i] = 0;
}
index++;
}
}
public void print()
{
for(int i=0; i<tab.length; i++)
{
if(tab[i]!=0)
System.out.print(tab[i]+ "");
}
}
}
public class PrimesNumbers
{
public static void main(String[] args) throws java.lang.Exception
{
Scanner in = new Scanner(System.in);
int tests_cases = in.nextInt();
int index=0;
int num1;
int num2;
while(index<tests_cases)
{
num1=in.nextInt();
num2=in.nextInt();
Sieve sieve = new Sieve(num1, num2);
sieve.odsiew();
sieve.print();
index++;
}
System.exit(0);
}
}