L'idea potrebbe anche andare bene, ma non è sviluppata altrettanto bene.

Supponiamo che l'elemento i-esimo del vettore abbia valore 13 (che è primo)

tu dividi 13 per tutti i numeri da 2 a "v[i] - 1" (in questo caso 12), e ogni volta che il resto della divisione intera è diverso da 0, incrementi un contatore. La tua speranza è che, se il numero è primo, tale contatore assuma un valore uguale a quello dell'elemento i-esimo? Non è così... nel caso del tredici avresti infatti:

13 % 2 != 0 -> count = 1;
13 % 3 != 0 -> count = 2;
13 % 4 != 0 -> count = 3;
...
continua così, alla fine ottieni:
...
13 % 12 != 0 -> count = 11;

cioè 13 è primo, ma col tuo metodo count alla fine avrà valore 11, che non è certamente uguale a 13... quello che vuoi fare tu andrebbe bene se tu dividessi 13 per tutti i numeri compresi tra 1 e 13 (compresi gli estremi!) ma poiché la divisione intera per 1 e 13, in questo caso, produrrebbe 0 come resto, non andrebbe bene comunque.

Io ti consiglio innanzitutto di "modularizzare" il problema, cioè sviluppare una funzione che, per ogni valore dell'array, restituisce "vero" se questo è primo e "falso" altrimenti. Nel caso sia primo, lo stampi.

Come sviluppare la funzione? Pensaci un po' sopra... tra l'altro potresti ache evitare di calcolare il modulo proprio con tutti i numeri compresi tra 2 e v[i] - 1...

pensaci: ciascun numero è divisibile esattamente (al massimo) per la sua metà... cioè, il massimo divisore esatto di 12 (tolto sé stesso) è 6, quello di 14 è 7 e così via...