Il codice, a parte qualcosa tipo
d=d++;
che puoi scrivere direttamente
++d;
non ha errori. E' l'algoritmo che è sbagliato. In particolare il ciclo do-while viene eseguito una sola volta, perché la condizione di continuazione si verifica solo per alcuni casi particolari, per tutti gli altri esce al primo giro.
E se hai fortuna, ti dice la risposta corretta (ovvero, solo per i numeri divisibili per 2 quando dice che non è primo).