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); } }