SPOJ błąd wykonania (NZEC)

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

Prawdopodobnie tu wykraczasz poza tablicę:

if(numbers[number] == true){
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

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

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