if (c > 0) do {
if (a%c==0) {
b++;
}
c--;
} while(c > 0);
Der Rumpf einer do-while-Schleife wird mindestens ein mal ausgeführt, weil die Prüfung der Bedingung am Ende stattfindet.
Der Rumpf einer while-Schleife wird eventuell überhaupt nicht ausgeführt, nämlich dann wenn die Bedingung schon zu Anfang nicht erfüllt ist.
Auf diesen Unterschied sollte man achten, wenn man eine while-Schleife in eine do-while-Schleife umwandelt.
In deinem konkreten Fall wird auch der Rumpf der while-Schleife mindestens ein mal ausgeführt, weil die Bedingung c > 0 anfänglich erfüllt ist. Die Lösung von Felixus ist deshalb auch korrekt, kann aber nicht verallgemeinert werden.