Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania bez odpowiedzi
Viewing all articles
Browse latest Browse all 21942

Sito Eratostenesa - przyspieszenie algorytmu

$
0
0

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

 


Viewing all articles
Browse latest Browse all 21942