I will give an overview of the methods I used in the past years to count points on varieties over finite fields. In the second part, I will expain a p-adic method that can compute #V(F_p^d) for a hypersurface in polynomial time. Finally we will apply these methods to some K3 surfaces and analyze their exceptional behaviour.