SPOJ błąd wykonania (NZEC)

Odpowiedz Nowy wątek
2019-01-04 14:04
0

Wrzucam mój kod do spoja i wyskakuje mi błąd jak w tytule i nie wiem dlaczego. W eclipsie działa dobrze i dla wybranych liczb też dobrze pokazuje. Zadanie jakie robie to liczby pierwsze i wg mnie działa dobrze ale wywala ten dziwny błąd.

import java.util.*;
import java.lang.*;

class Main
{
    public static void main (String[] args) throws java.lang.Exception
    {
        int n=1000;
        boolean[] numbers = new boolean[n+1];
        for(int i=0; i<numbers.length; i++){
            numbers[i] = true;
        }
        numbers[1] = false;
        for(int i = 2; i <= Math.sqrt(n); i++){
            if(numbers[i] == true){
                for(int j = i + i; j < numbers.length; j = j + i){
                    numbers[j] = false;
                }
            }
        }
        int howManyTests, number;
        Scanner odczyt = new Scanner(System.in);
        howManyTests = odczyt.nextInt();
        for(int i = 0; i < howManyTests; i++){
            Scanner reading = new Scanner(System.in);
            number = reading.nextInt();
            if(numbers[number] == true){
                System.out.println("TAK");
            }else {
                System.out.println("NIE");
            }
        }
    }
} 

Pozostało 580 znaków

2019-01-04 14:23
0

Prawdopodobnie tu wykraczasz poza tablicę:

if(numbers[number] == true){

Szacuje się, że w Polsce brakuje 50 tys. programistów

Pozostało 580 znaków

2019-01-04 14:35
0
vpiotr napisał(a):

Prawdopodobnie tu wykraczasz poza tablicę:

if(numbers[number] == true){

Dlaczego?
jak np jest w zadaniu powiedziane że n - liczba testów n<100000, w kolejnych liniach n liczb z przedziału [1..10000] (swoją drogą poprawiłem te 1000 na 10000 alke dalej ten błąd leci), to znaczy że podana liczba musi zawierać się od 1 do 10000 więc nie powinno wyjść poza tablicę bo indeks maksymalnie bedzie 10000 a tablice stworzyłem 10000+1

Pozostało 580 znaków

2019-01-04 15:07
0

Coś Masz nie tak z parsowaniem inpoutu i drukowaniem, albo SPOJ się dziwnbie zachowuje, bo ten kod, powinien przechodzić (używa isPrpbablePrime z klasy BigInteger), poniżej jest jeszcze naiwne is_prime, ale do 10 tys. też jest szybkie:

    import java.util.*;
    import java.lang.*;
    import java.math.BigInteger;

    class Main
    {   
        public static boolean is_primeBigInt(int n) {
            BigInteger a = new BigInteger(Integer.toString(n));
            return a.isProbablePrime(30);
        }

        public static boolean is_prime(int n) {
            if (n <= 3) return n > 1;
            if ( (n % 2 == 0) || (n % 3 == 0) ) return false;
            int i = 5;
            while (i * i <= n) {
                if ( (n % i == 0) || ( n % (i + 2) == 0) )
                    return false;
                i += 6;
            }
            return true;
        }

        public static void main (String[] args) throws java.lang.Exception
        {
            int howManyTests, number;
            Scanner odczyt = new Scanner(System.in);
            howManyTests = odczyt.nextInt();
            for(int i = 0; i < howManyTests; i++){
                Scanner reading = new Scanner(System.in);
                number = reading.nextInt();

                if(is_primeBigInt(number)){
                    System.out.println("TAK");
                }
                else {
                    System.out.println("NIE");
                }
            }
        }
    }

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0