Zacznijmy od
if(n%i==0)
ten warunek zwraca prawdę tylko wtedy gdy n jest podzielne przez i, (% to operator reszty z dzielenia, kiedy reszta z dzielenia to zero to n jest podziele przez i), a to znaczy że liczba nie jest liczbą pierwszą.
Pętla
for(int i=2;i*i<=n;i++)
to pętla szukająca wszystkich liczb które mogą dzielić n. Pętla kończy swoje działanie gdy i * i > n, czyli inaczej i > sqrt(n) (pierwiastkowanie z obu stron, zakładamy że n > 0). Innymi słowy pętla zaczyna przy i = 2 i kończy gdy i przekorczy pierwiastek z n.
Jeżeli liczba jest liczbą złożoną to na pewno ma dzielnik mniejszy bądź równy swojemy pierwiastkowi. Wynika to z tego że jeżeli istnieje czynnik większy od pierwiastka n to musi istnieć też mniejszy (np. 36 = 3 * 12, 3 < 6 a 12 > 6).
Mam nadzieje że pomogłem, pozdrawiam.