Jaki masz błąd w sprawdzarce? Nie widać w tym kawałku kodu, który wysłałeś błędu, polecam zamiast pisania j<=floor(sqrt(tab[i])), spróbować j * j <= tab[i], oraz j powinno zaczynać od 2, przecież liczba parzysta nie jest pierwsza (chyba, że sprawdzasz podzielność przez 2 gdzie indziej).
Jednak największy problem twojego rozwiązania (wcale nie słabego), będzie jego czas działania. Mamy 100 000 liczb, każdą obsługujemy w pierwiastek z n, gdzie n maksymalnie 10 000, więc pierwiastek z niego to 100. Mamy 100 000 razy 100 operacji, czyli 10^8, co dla spoja będzie za wolne. Złożonośc O( n * pierwiastek z n ).
Zadanie można wykonać w O( n ). Cały trick polega na wykorzystaniu sita erastotenesa, które po 10 000 * log2( 10 000 ) da nam tablice z informacja dla kazdej liczby od 1 do 10 000 czy jest pierwsza. Potem bedziemy wczytywać liczby i sprawdzać "pierwszość" w tablicy. Samo sito to pare linijek kodu, odsyłam na wiki wikipedia
Jeśli nie rozumiesz, co oznacza O(n), to nie ma problemu, o złożoności czasowej możesz poczytać tu: złożoność obliczeniowa