Nie sprawdzałem jak działa ten program, ale zakładam, że wypisuje same NIE. Sito Eratostenesa działa tak, że na starcie zakłada, że wszystkie liczby są pierwsze, a potem wykreśla te, które nie są. Twój program już na starcie wykreśla tab[2], a przecież 2 jest liczbą pierwszą... Zauważ również, że jeżeli jakaś liczba już została u ciebie określona jako nie będąca liczbą pierwszą, to nie musisz sprawdzać jej wielokrotności. Na dodatek warto jeszcze dodać, że nie musisz wykonywać sita dla każdego sprawdzenia osobno. Wystarczy, że wykonasz je raz a potem sprawdzisz czy dane wartości są liczbami pierwszymi, czy nie. A przechodząc do prawdopodobnie głównego problemu z którym na razie się zmagasz, traktujesz shorta jako wartość logiczną. Tutaj podpowiem, że łatwiej jest napisać jakiś warunek w stylu:
if(tab[a]==true){}
Nie wiem, czy są to wszystkie sprawy, na które warto zwrócić uwagę, ale mam nadzieję, że mogłem być, choć trochę pomocny. Powodzenia 